代码如下
<?php
// 在此定义常量
//RSA 公钥
define('RSA_PUBLIC', '-----BEGIN PUBLIC KEY-----
你的RSA公钥
-----END PUBLIC KEY-----');
//RSA 私钥
define('RSA_PRIVATE', '-----BEGIN PRIVATE KEY-----
你的RSA私钥
-----END PRIVATE KEY-----');
/**
* 通过私钥给字符串生成签名
* @param string $string 待签名字符串
* @param [type] $priKey 私钥
* @return string base64结果值
*/
function getSign($string,$priKey = RSA_PRIVATE){
$privKeyId = openssl_pkey_get_private($priKey);
$signature = '';
openssl_sign($string, $signature, $privKeyId);
openssl_free_key($privKeyId);
return base64_encode($signature);
}
/**
* 通过公钥检测签名是否正确
* @param string $pubKey 公钥
* @param string $sign 签名
* @param string $string 这个签名对应的字符串
* @return bool
*/
function checkSign($sign,$string,$pubKey = RSA_PUBLIC){
$publicKeyId = openssl_pkey_get_public($pubKey);
$result = openssl_verify($string, base64_decode($sign), $publicKeyId);
openssl_free_key($publicKeyId);
return $result === 1 ? true : false;
}
$a = 'hello';
$sign = getSign($a);
$check = checkSign($sign,$a) ? '正确' : '错误';
echo "{$a}的签名是{$sign}<br>";
echo "{$sign}这个签名对{$a}的校验结果是: {$check}";