當(dāng)前位置:博客首頁>>PHP >> 閱讀正文

php基于sha1withRSA算法的簽名和驗簽(pfx證書)

作者: 鄭曉 分類: PHP 發(fā)布于: 2016-06-21 17:58 瀏覽:40,716 評論(13)


在和第三方支付接口對接時經(jīng)常會對數(shù)據(jù)進行簽名和驗簽,sha1WithRSA也算是比較常用的一種簽名加密算法。php開啟openssl庫后實現(xiàn)起來也算比較簡單。
我在這里使用sha1withRSA算法來實現(xiàn)數(shù)據(jù)的加密簽名和驗簽,其中公鑰和私鑰均讀取自接口方提供的.pfx證書文件。

以下是使用私鑰進行簽名的代碼示例,注意其中在return前對生成的簽名密文進行base64編碼:

/**
* 簽名 生成簽名串 基于sha1withRSA
* @param string $data 簽名前的字符串
* @return string 簽名串
* @link yjfs.org.cn
*/
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 yjfs.org.cn
*/
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;
}

? ? ? ?

本文采用知識共享署名-非商業(yè)性使用 3.0 中國大陸許可協(xié)議進行許可,轉(zhuǎn)載時請注明出處及相應(yīng)鏈接。

本文永久鏈接: http://yjfs.org.cn/php-sha1withrsa-sign-verify-pfx.html

php基于sha1withRSA算法的簽名和驗簽(pfx證書):目前有13 條留言

用戶評論頭像 求教發(fā)表于 2019年03月01日 17:30[回復(fù)]

請問下,驗簽跟證書域名有關(guān)嗎,為什么我使用您的方法,驗簽返回的是0呢

    用戶評論頭像 鄭曉發(fā)表于 2019年03月01日 17:40[回復(fù)]

    可能證書路徑不正確、密碼不正確、不是PKCS#12格式的證書

      用戶評論頭像 求教發(fā)表于 2019年03月01日 17:42[回復(fù)]

      路徑和密碼都是正確的,已經(jīng)打印出了公私鑰了,證書是PKCS#12格式的證書,有2個證書,一個是自制pfx證書,一個是找西部數(shù)碼買的pfx證書

      用戶評論頭像 求教發(fā)表于 2019年03月01日 17:44[回復(fù)]

      路徑和密碼都是正確的,已經(jīng)打印出了公私鑰了,證書是PKCS#12格式的證書,有2個證書,一個是自制pfx證書,一個是找西部數(shù)碼買的pfx證書,測試了都不行,請問下您方便發(fā)一個你的pfx證書給我,我測試一下嗎

        用戶評論頭像 鄭曉發(fā)表于 2019年03月02日 13:19[回復(fù)]

        抱歉,是我的鍋。。。簽名時,把返回的簽名數(shù)據(jù)用base64轉(zhuǎn)碼了,所以在驗簽時$signature也 需要base64_decode。文中已經(jīng)修改。。。

用戶評論頭像 丁八塊發(fā)表于 2018年11月07日 20:04[回復(fù)]

我也是來試試昵稱的

用戶評論頭像 昵稱可以自己定呢發(fā)表于 2018年10月19日 14:57[回復(fù)]

昵稱可以自己定呢

用戶評論頭像 肚滿腸肥的蜜三刀發(fā)表于 2016年08月23日 20:32[回復(fù)]

我只是來試下昵稱

用戶評論頭像 好心的斑馬發(fā)表于 2016年07月29日 14:58[回復(fù)]

就想看看昵稱

用戶評論頭像 坑爹的春卷發(fā)表于 2016年07月27日 13:41[回復(fù)]

看看昵稱

用戶評論頭像 友好的鏝頭發(fā)表于 2016年07月17日 02:16[回復(fù)]

路過

用戶評論頭像 寬厚的烏賊發(fā)表于 2016年07月13日 09:13[回復(fù)]

博主我想和你交個朋友,可以加我QQ嗎。我覺得你文章寫得還不錯。

用戶評論頭像 可信的長頸鹿發(fā)表于 2016年06月27日 15:57[回復(fù)]

我只是來試下昵稱

發(fā)表評論

change vcode