在和第三方支付接口对接时经常会对数据进行签名和验签,sha1WithRSA也算是比较常用的一种签名加密算法。php开启openssl库后实现起来也算比较简单。
郑晓在这里使用sha1withRSA算法来实现数据的加密签名和验签,其中公钥和私钥均读取自接口方提供的.pfx证书文件。
以下是使用私钥进行签名的代码示例,注意其中在return前对生成的签名密文进行base64编码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | /** * 签名 生成签名串 基于sha1withRSA * @param string $data 签名前的字符串 * @return string 签名串 * @link zlkb.net */ function sign($data) { $certs = array(); openssl_pkcs12_read(file_get_contents("你的.pfx文件路径"), $certs, "password"); //其中password为你的证书密码 if(!$certs) return ; $signature = ''; openssl_sign($data, $signature, $certs['pkey']); return base64_encode($signature); } |
验签时使用公钥,也就是.pfx文件中的cert KEY:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | /** * 验签 验证签名 基于sha1withRSA * @param $data 签名前的原字符串 * @param $signature 签名串 * @return bool * @link zlkb.net */ function verify($data, $signature) { $certs = array(); openssl_pkcs12_read(file_get_contents("你的.pfx文件路径"), $certs, "password"); if(!$certs) return ; $result = (bool) openssl_verify($data, $signature, $certs['cert']); //openssl_verify验签成功返回1,失败0,错误返回-1 return $result; } |