php基于sha1withRSA算法的签名和验签(pfx证书)
作者: 郑晓 分类: PHP 发布于: 2016-06-21 17:58 浏览:40,648 评论(13)
在和第三方支付接口对接时经常会对数据进行签名和验签,sha1WithRSA也算是比较常用的一种签名加密算法。php开启openssl库后实现起来也算比较简单。
我在这里使用sha1withRSA算法来实现数据的加密签名和验签,其中公钥和私钥均读取自接口方提供的.pfx证书文件。
以下是使用私钥进行签名的代码示例,注意其中在return前对生成的签名密文进行base64编码:
/**
* 签名 生成签名串 基于sha1withRSA
* @param string $data 签名前的字符串
* @return string 签名串
* @link www.zh30.com
*/
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:
/**
* 验签 验证签名 基于sha1withRSA
* @param $data 签名前的原字符串
* @param $signature 签名串
* @return bool
* @link www.zh30.com
*/
function verify($data, $signature) {
$certs = array();
openssl_pkcs12_read(file_get_contents("你的.pfx文件路径"), $certs, "password");
if(!$certs) return ;
$result = (bool) openssl_verify($data, base4_decode($signature), $certs['cert']); //openssl_verify验签成功返回1,失败0,错误返回-1
return $result;
}
本文采用知识共享署名-非商业性使用 3.0 中国大陆许可协议进行许可,转载时请注明出处及相应链接。
本文永久链接: https://www.zh30.com/php-sha1withrsa-sign-verify-pfx.html
php基于sha1withRSA算法的签名和验签(pfx证书):目前有13 条留言
请问下,验签跟证书域名有关吗,为什么我使用您的方法,验签返回的是0呢
可能证书路径不正确、密码不正确、不是PKCS#12格式的证书
路径和密码都是正确的,已经打印出了公私钥了,证书是PKCS#12格式的证书,有2个证书,一个是自制pfx证书,一个是找西部数码买的pfx证书
路径和密码都是正确的,已经打印出了公私钥了,证书是PKCS#12格式的证书,有2个证书,一个是自制pfx证书,一个是找西部数码买的pfx证书,测试了都不行,请问下您方便发一个你的pfx证书给我,我测试一下吗
抱歉,是我的锅。。。签名时,把返回的签名数据用base64转码了,所以在验签时$signature也 需要base64_decode。文中已经修改。。。
我也是来试试昵称的
昵称可以自己定呢
我只是来试下昵称
就想看看昵称
看看昵称
路过
博主我想和你交个朋友,可以加我QQ吗。我觉得你文章写得还不错。
我只是来试下昵称