1、逻辑
签名:将明文用sha1算法计算散列值,再用私钥和RSA算法对该散列值进行加密处理;
验签:用公钥和RSA算法将密文解密,再把明文用sha1算法计算散列值,两相对比,判断信息正误。
2、php代码
*/
/*
* 签名:基于sha1withRSA算法,将明文生成签名串
*
* $filePath 证书的路径
* $password 私钥的密码
* @param string $data 签名前的字符串
* @return string 签名串,使用base64_算法加密
*/
function sign($data){
$filePath = '123.pfx';
$password = '123456';
$certs = array();
openssl_pkcs12_read(file_get_contents($filePath), $certs, $password);
if($certs) return ;
$signature = '';
openssl_sign($data,$signature,$certs['pkey']);
return base64_encode($signature);
}
/*
* 验签:基于sha1withRSA算法,验证签名串的正误
*
* $filePath 证书的路径
* @param $data 签名前的原字符串
* @param $signature 签名串
* @return bool 1成功,0失败
*
*/
function verify($data,$signature){
$filePath = '456.pem';
$pem = openssl_get_publickey(file_get_contents($filaPath));
if(!$pem) return ;
$result = (bool) openssl_verify($data, base64_decode($signature), $pem);
retun $result;
}