[精选] php是如何使用 RSA私钥公钥 签名校验的呢?

RSA算法是种能同时用于加密和数字签名的算法,也是被研究得最广泛的公钥算法。而公钥私钥的加密解密也会使一些小伙伴疑惑,这里稍微简单说一下,再简单地实现一下。

首先,公钥加密私钥可以解密。其次,私钥加密公钥可以解密。再深一步来说,公钥负责加密,私钥负责解密。私钥负责签名,公钥负责验证。公钥就是给大家用的,私钥就是给自己用的,必须小心保存。

举个栗子,A想向B发送一条加密的信息,使用B的公钥加密,这样只有拥有对应私钥的B才能解密,确保了信息没有被别人看到,其次A可以用自己的私钥加密一条信息发送给B,B用A的公钥验证,因为只有A拥有私钥所以能证明此信息是A所发的。(如果A是在借钱B经过公钥验证后就知道是本人而不是骗子了)

网上看了很多文章都没有php相关的例子,这里给大家简单的写了一个。

生成 RSA 私钥

$ openssl genrsa -out rsa_private_key.pem 1024
生成 RSA 公钥(php和java都用私钥生成公钥)
$ openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
PHP 版本加密,认证:
 0,
    'message' => 'error'
];

// 执行验证
$success = openssl_verify($message, base64_decode($signature), $publicKey, OPENSSL_ALGO_SHA256);
if ($success === -1) {
    $return['message'] = ''.openssl_error_string();
} elseif ($success === 1) {
    $return['code'] = 1;
    $return['message'] = 'success';
} else {
    $return['message'] = openssl_error_string();
}
echo 'openssl_verify result:';
var_dump($return);
这里都写在一个文件里了,为了方便测试,其实大家看相关的注释就能看的出来的
执行脚本,结果如下:
>php -f depakin.php
signature:q6nCWEEXHRubgZEFT3wkjVd5gmmDucBCAiX20HBrpSBxPevlxCTwkMZ+35nVpVoj+Rmz3m+5qWBZ2m0q8POoDFr5YPsANSos0cM1Nr1zC9ju6SRCBpRmiGKLxzniuehkrRyxbWf+rLthmiSDnQa/peWw5Y7hsVT68yR8AoCovRY=
openssl_verify result:
array(2) {
  'code' =>
  int(1)
  'message' =>
  string(7) "success"
}

你可能感兴趣的:(laravel,php,php)