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

php基于sha1withRSA算法的簽名和驗(yàn)簽(pfx證書(shū))

作者: 鄭曉 分類(lèi): PHP 發(fā)布于: 2016-06-21 17:58 瀏覽:40,491 評(píng)論(13)


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

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

/**
* 簽名 生成簽名串 基于sha1withRSA
* @param string $data 簽名前的字符串
* @return string 簽名串
* @link www.yjfs.org.cn
*/
function sign($data) {
$certs = array();
openssl_pkcs12_read(file_get_contents("你的.pfx文件路徑"), $certs, "password"); //其中password為你的證書(shū)密碼
if(!$certs) return ;
$signature = '';
openssl_sign($data, $signature, $certs['pkey']);
return base64_encode($signature);
}

驗(yàn)簽時(shí)使用公鑰,也就是.pfx文件中的cert KEY:

/**
* 驗(yàn)簽 驗(yàn)證簽名 基于sha1withRSA
* @param $data 簽名前的原字符串
* @param $signature 簽名串
* @return bool
* @link www.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驗(yàn)簽成功返回1,失敗0,錯(cuò)誤返回-1
return $result;
}

? ? ? ?

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

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

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

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

請(qǐng)問(wèn)下,驗(yàn)簽跟證書(shū)域名有關(guān)嗎,為什么我使用您的方法,驗(yàn)簽返回的是0呢

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

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

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

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

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

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

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

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

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

我也是來(lái)試試昵稱(chēng)的

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

昵稱(chēng)可以自己定呢

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

我只是來(lái)試下昵稱(chēng)

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

就想看看昵稱(chēng)

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

看看昵稱(chēng)

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

路過(guò)

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

博主我想和你交個(gè)朋友,可以加我QQ嗎。我覺(jué)得你文章寫(xiě)得還不錯(cuò)。

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

我只是來(lái)試下昵稱(chēng)

發(fā)表評(píng)論

change vcode