天天看點

php rsa2 簽名與解密,PHP RSA2 加密 、 解密 、簽名 、驗證簽名

突然發現接收百度資源太多了,我也回饋一下吧。

RSA2 标準算法名稱 SHA256WithRSA

1、RSA非對稱加密技術

2、SHA256 是SHA-2下細分出的一種算法

SHA-2,名稱來自于安全雜湊演算法2(英語:Secure Hash Algorithm 2)的縮寫,一種密碼散列函數算法标準,由美國國家安全局研發,屬于SHA算法之一,是SHA-1的後繼者。

詳細介紹連接配接:https://blog.csdn.net/u011583927/article/details/80905740

1、加密和解密

公鑰是公開的密鑰,有加密方使用。隻用于加密無法解密。私鑰是不公開的,别人無法擷取,使用者解密。

注意的是,為什麼私鑰對同一資料進行簽名加密的結果是一樣的,使用公鑰進行加密就不一樣了呢?

詳細請參考:https://blog.csdn.net/guyongqiangx/article/details/74930951

2、簽名和驗證簽名

簽名是由發送資料的一方發起的,防止傳輸過程中被篡改資料内容。是以簽名使用的是私鑰。而驗證簽名使用的是公鑰。

附帶:

java RSA2 加密、解密 、簽名和驗證簽名

https://blog.csdn.net/TaLinBoy/article/details/106124535

IOS:RSA2 加密、解密 、簽名和驗證簽名

https://blog.csdn.net/TaLinBoy/article/details/106140526

//公鑰

function rsaPublicKey()

{

return "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArNPzr7pnN+LBV9c1vFWlK6qAc5Y3fx1TLeIajhP7ni3Jrrs3uLBOQjoBjx6fmQ9WZyLlqdsFOftLe5cQsQlRHtVakAQIypUJyB7VJ5HzOA+lJS6675V4xzntwrYcTTxh25UXoAMae+RNkKwhmhNIi2fxl1638SbiwTi2msmgvkkeZwu9hw8r+p/3VE8dS6sH6jDda3L/M4fRIymfcRl9NzLue3wVb6ynALHIoOK5IjsKSDlpV6qGgx1QUy+S6RKXRkHoeOt5q/abvH0Sjdbz1FANkQBov3zU1wyt2G/DtClkUjaEMDmC/u1PhO1WQ/qsDmsI7c9cenrMPKpieMDxJQIDAQAB";

}

//私鑰

function getPrivateKey()

{

return $priKey = "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCs0/Ovumc34sFX1zW8VaUrqoBzljd/HVMt4hqOE/ueLcmuuze4sE5COgGPHp+ZD1ZnIuWp2wU5+0t7lxCxCVEe1VqQBAjKlQnIHtUnkfM4D6UlLrrvlXjHOe3CthxNPGHblRegAxp75E2QrCGaE0iLZ/GXXrfxJuLBOLaayaC+SR5nC72HDyv6n/dUTx1LqwfqMN1rcv8zh9EjKZ9xGX03Mu57fBVvrKcAscig4rkiOwpIOWlXqoaDHVBTL5LpEpdGQeh463mr9pu8fRKN1vPUUA2RAGi/fNTXDK3Yb8O0KWRSNoQwOYL+7U+E7VZD+qwOawjtz1x6esw8qmJ4wPElAgMBAAECggEABNNDF7oq1RTb5I2x5qD2hFZVkUSVppMlRh/ssWBN81/gZGQ+PUYQ3Uj8z6fheVbECQugoWInznNda2Uvll3F+cgnp+Mw8qUAGaoAtgLdaUiIihX4qqU/8sIDiR7oAeEIc2bBetpzVBeu8bXYl1JoAVpk1J7UoGM/S/k/Iem0tvNMatWFFuVG6Em0AMJLpR3o152ZNOrWfqoQZeP08aabp31n517ZpsQNanS1h/yeV1X9AjCoHQ01qHEb/O8bvbHpSzXnUeR3bIsBqmuvBcllXFpUbZ7z6v9Oc9BPX3ohYuduVSplg5Ds7aEr4Ed0FCfJTqhnrM1MSjFxINPOgblXmQKBgQDT+Akiwev14eH99hI3Less3p8LU7sM7U9uA+z3g9repcpHpbIdTU9arEz7Qo6W/P9hBX4ghRSIDnZkBUgQ3/wJHsBoSO+/YKGs/PMTz1efjcAjff5IZuaj7nV9SdJGWnPOU5dwa3uKZys3eR5SrrQCDsXhZdzp45g+ZLzdGnikTQKBgQDQuoAUVBvtuB5vqsv4Wgr+MasZaNM0xCGA0wGjHqkVRI4Otuc+CbY4bSPrvIl2jWt2TvxM0NyefcdbYvt0obVawWEJkotw1xyFDnghKoTnq7msT5scwBarl7iRKN2EeyNqv7weTU1zCopN2S9lkyBVgDpAcOaT0bg4q7DA3FPMOQKBgQDNtDepc2f6Bmu6ecLTqcxAjwrpgyhTMzmSGl0tFtigmWPkg/iGVzBbXjqW29Bk1sE+9oWgKYXzQ5XBGx8EwVllwGIY0i9YGf7MUe3Tm7P9MyLzTqImwTWygQejvrBBdiZMZPLiNmx9tAFMpE25D7HBDXUbeC8bC7QDWN+v8rCBQQKBgQCi2nBl6/3iar4siAkemzpqe9wwNg5b5A7z0S481AY+Vr+zkVc4myE2Q0k8e1yRR+OpahUF5gvMCPzLO55PsH+r8KdCbbkn8F4LHm/yCJerndt/KpkuRF0rwnO5pjW3UNAgULp4tf2QnY+tD6AgUztuGl7Yun3cpUtjw+ljgERNWQKBgBX1YkC0ucYJyNl8y7Qb8ysnwqAbQgg9ynkXIpyCjSJcUZPvncFYaQGOTtYPTOa4qp49xfFqkFgOrMiQFoKSZSHtHTQhEpS0v3S0RA0MMCV0sxJ5hq/t3oPuI9+3e1BKXGTiBMMF3X38/xD7lvoLZqVxXWTxzXWudLzhpIqibXKn";

}

/使用RSA公鑰加密資料 結果是base64

function encryptRSA($dataStr, $publicKey)

{

try {

if (empty($publicKey)) {

return false;

}

if (empty($dataStr)) {

return false;

}

$res = "-----BEGIN PUBLIC KEY-----\n" . wordwrap($publicKey, 64, "\n", true) . "\n-----END PUBLIC KEY-----";

$publicKey = openssl_pkey_get_public($res); //解析公鑰

openssl_public_encrypt($dataStr, $encrypted, $publicKey);

if (empty($encrypted)) {

return false;

}

return base64_encode($encrypted);

} catch (Exception $e) {

return false;

}

}

//使用自己的RSA私鑰解析資料

function decryptRSA($encryptedStr)

{

try {

if (empty($encryptedStr)) {

return false;

}

$privateKey = getPrivateKey();

$res = "-----BEGIN RSA PRIVATE KEY-----\n" . wordwrap($privateKey, 64, "\n", true) . "\n-----END RSA PRIVATE KEY-----";

$key = openssl_pkey_get_private($res); //解析私鑰

$encrypted = base64_decode($encryptedStr);

//解密

openssl_private_decrypt($encrypted, $decrypted, $key);

if (empty($decrypted)) {

return false;

}

return $decrypted;

} catch (Exception $e) {

return false;

}

}

//sha256WithRSA 私鑰簽名加密

function getSign($dataStr)

{

try {

if (empty($dataStr)) {

return false;

}

$privateKey = getPrivateKey();

$privateKey = "-----BEGIN RSA PRIVATE KEY-----\n" . wordwrap($privateKey, 64, "\n", true) . "\n-----END RSA PRIVATE KEY-----";

echo $privateKey."\n";

$key = openssl_pkey_get_private($privateKey);

openssl_sign($dataStr, $sign, $privateKey, OPENSSL_ALGO_SHA256);

openssl_free_key($key);

if (empty($sign)) {

return false;

}

$sign = base64_encode($sign);

return $sign;

} catch (Exception $e) {

return false;

}

}

//驗證 sha256WithRSA 簽名 sign是簽名後的base64 dataStr是簽名的内容

function verify($dataStr, $sign, $publicKey)

{

try {

if (empty($dataStr)) {

return false;

}

$res = "-----BEGIN PUBLIC KEY-----\n" . wordwrap($publicKey, 64, "\n", true) . "\n-----END PUBLIC KEY-----";

$key = openssl_pkey_get_public($res);

$data = openssl_verify($dataStr, base64_decode($sign), $key, OPENSSL_ALGO_SHA256);

return $data;

} catch (Exception $e) {

return false;

}

}