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;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值