即RSA私鑰,按照手冊,按以下方式生成:
openssl genrsa -out rsa_private_key.pem 1024即RSA私鑰,按照手冊,按以下方式生成:
openssl rsa -in rsa_private_key.pem -pubout -out rsa_html' target='_blank'>public_key.pem
openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt
該命令將RSA私鑰轉換成PKCS8格式,對于PHP來說,不需要。根據手冊,在簽約平臺獲得。
如果你直接復制下來的話,會得到一個字符串,需要進行下面的轉換;
1)把空格變成換行
2)添加注釋
比如你復制下來的公鑰是:MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDRBMjkaBznjXk06ddsL751KyYt
TCoccYMDXEIWYTs3CwIDAQAB,那轉換之后為:
-----BEGIN PUBLIC KEY-----
1 <?php 2 /** 3 * 簽名字符串 4 * @param $prestr 需要簽名的字符串 5 * return 簽名結果 6 */ 7 function rsaSign($prestr) { 8 $public_key= file_get_contents('rsa_private_key.pem'); 9 $pkeyid = openssl_get_privatekey($public_key);10 openssl_sign($prestr, $sign, $pkeyid);11 openssl_free_key($pkeyid);12 $sign = base64_encode($sign);13 return $sign;14 }15 ?>注意點:
1.$prestr的內容和MD5一樣(參見手冊,但不包含最后的MD5密碼)
2.簽名用商戶私鑰
3.最后的簽名,需要用base64編碼
4.這個函數返回的值,就是這次請求的RSA簽名。
驗簽函數:
1 <?php 2 /** 3 * 驗證簽名 4 * @param $prestr 需要簽名的字符串 5 * @param $sign 簽名結果 6 * return 簽名結果 7 */ 8 function rsaVerify($prestr, $sign) { 9 $sign = base64_decode($sign);10 $public_key= file_get_contents('rsa_public_key.pem');11 $pkeyid = openssl_get_publickey($public_key);12 if ($pkeyid) {13 $verify = openssl_verify($prestr, $sign, $pkeyid);14 openssl_free_key($pkeyid);15 }16 if($verify == 1){17 return true;18 }else{19 return false;20 }21 }22 ?>注意點:
1 <?php 2 /* * 3 * RSA 4 * 詳細:RSA加密 5 * 版本:3.3 6 * 日期:2014-02-20 7 * 說明: 8 * 以下代碼只是為了方便商戶測試而提供的樣例代碼,商戶可以根據自己網站的需要,按照技術文檔編寫,并非一定要使用該代碼。 9 * 該代碼僅供學習和研究支付寶接口使用,只是提供一個參考。10 */11 /**12 * 簽名字符串13 * @param $prestr 需要簽名的字符串14 * return 簽名結果15 */16 function rsaSign($prestr) {17 $public_key= file_get_contents('rsa_private_key.pem');18 $pkeyid = openssl_get_privatekey($public_key);19 openssl_sign($prestr, $sign, $pkeyid);20 openssl_free_key($pkeyid);21 $sign = base64_encode($sign);22 return $sign;23 }24 /**25 * 驗證簽名26 * @param $prestr 需要簽名的字符串27 * @param $sign 簽名結果28 * return 簽名結果29 */30 function rsaVerify($prestr, $sign) {31 $sign = base64_decode($sign);32 $public_key= file_get_contents('rsa_public_key.pem');33 $pkeyid = openssl_get_publickey($public_key);34 if ($pkeyid) {35 $verify = openssl_verify($prestr, $sign, $pkeyid);36 openssl_free_key($pkeyid);37 }38 if($verify == 1){39 return true;40 }else{41 return false;42 }43 }44 ?>
最后要說的是官方提供的手冊上說的基本上都是正確的,只是有些地方沒有說的很詳細,開發的時候一定要多參考,大致就是這樣,祝大家好運。
PHP編程鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。
新聞熱點
疑難解答