即RSA私鑰,按照手冊,按如下方式生成:php
即RSA私鑰,按照手冊,按如下方式生成:
openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pemandroid
openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocryptios
根據手冊,在簽約平臺得到。
若是你直接複製下來的話,會獲得一個字符串,須要進行下面的轉換;
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 ?>
最後要說的是官方提供的手冊上說的基本上都是正確的,只是有些地方沒有說的很詳細,開發的時候必定要多參考,大體就是這樣,祝你們好運。測試