ããè½ç¶æ¯ä»å®å®æ¹è¿æªæä¾ç¸å
³SDKï¼PHPç¡®å®å¯ä»¥å®ç°RSAæ¹å¼çç¾åï¼è¿ç¹å
¶å®å¾éè¦ï¼ç±äºä¸çæï¼å¨éå°å°é¾çæ¶åï¼ç»å¸¸ä¼ä¸ç±èªä¸»å°æ³å°æ¯å¦PHPä¸æ¯æRSAç¾åï¼å¹²èç¨MD5å¾äºï¼è¿æ ·å°±æ²¡æäºåè¿çå¨åãå
¶å®è¯´ç©¿äºMD5åRSAç¾åï¼ä¸åçåªæ¯ç¾åæ¹å¼çåºå«ï¼å
¶ä»çé½ä¸æ ·ï¼å æ¤æè¿é主è¦è¯´ä¸ä¸å¦ä½ç¨RSAè¿è¡ç¾ååéªç¾ã
ããé¦å
ä½ éè¦åå¤ä¸é¢çä¸è¥¿ï¼
ããphpçopensslæ©å±éå·²ç»å°è£
好äºéªç¾çæ¹æ³openssl_verifyã
ããå¦æå¨Windowsä¸çphp.iniéè¦å¼å¯Openssl模åï¼ extension=php_openssl.dll
ããåæ·ç§é¥ï¼
ããå³RSAç§é¥ï¼æç
§æåï¼æ以ä¸æ¹å¼çæï¼
ããopenssl genrsa -out rsa_private_key.pem 1024
ããåæ·å
¬é¥ï¼
ããå³RSAç§é¥ï¼æç
§æåï¼æ以ä¸æ¹å¼çæï¼
ããopenssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
ããçæä¹åï¼æç
§æåç说æï¼éè¦å¨ç¾çº¦å¹³å°ä¸ä¼ å
¬é¥ï¼éè¦æ³¨æçæ¯ï¼ä¸ä¼ çæ¶åéè¦æææç注éåæ¢è¡é½å»æã
ããå¦å¤æåä¸è¿æå¦ä¸å½ä»¤ï¼
ããopenssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt
ãã该å½ä»¤å°RSAç§é¥è½¬æ¢æPKCS8æ ¼å¼ï¼å¯¹äºPHPæ¥è¯´ï¼ä¸éè¦ã
ããæ¯ä»å®å
¬é¥ï¼
ããæ ¹æ®æåï¼å¨ç¾çº¦å¹³å°è·å¾ã
ããå¦æä½ ç´æ¥å¤å¶ä¸æ¥çè¯ï¼ä¼å¾å°ä¸ä¸ªå符串ï¼éè¦è¿è¡ä¸é¢ç转æ¢ï¼
ãã1ï¼æç©ºæ ¼åææ¢è¡
ãã2ï¼æ·»å 注é
ããæ¯å¦ä½ å¤å¶ä¸æ¥çå
¬é¥æ¯ï¼MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDRBMjkaBznjXk06ddsL751KyYt
ããztPFg0D3tu7jLqCacgqL+lbshIaItDGEXAMZmKa3DV6Wxy+l48YMo0RyS+dWze4M
ããUmuxHU/v6tiT0ZTXJN3EwrjCtCyyttdv/ROB3CkheXnTKB76reTkQqg57OWW+m9j
ããTCoccYMDXEIWYTs3CwIDAQABï¼é£è½¬æ¢ä¹å为ï¼
ãã-----BEGIN PUBLIC KEY-----
ããMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDRBMjkaBznjXk06ddsL751KyYt
ããztPFg0D3tu7jLqCacgqL+lbshIaItDGEXAMZmKa3DV6Wxy+l48YMo0RyS+dWze4M
ããUmuxHU/v6tiT0ZTXJN3EwrjCtCyyttdv/ROB3CkheXnTKB76reTkQqg57OWW+m9j
ããTCoccYMDXEIWYTs3CwIDAQAB
ãã-----END PUBLIC KEY-----
ããæå
¬é¥ä¿åå¨æ件éã
ãã注æè¿ä¸ªæ¯2048ä½çå
¬é¥åºè¯¥æ¯9è¡æè
10è¡ï¼ä¸è½ä¸º1è¡ï¼ä¸ç¶PHPçopenssl_pkey_get_publicæ æ³è¯»åï¼pub_key_idçç»æ为falseï¼å¦æ没æ-----BEGIN PUBLIC KEY----- å -----END PUBLIC KEY----- å¯ä»¥èªå·±å ä¸ï¼æåä¿åå°ä¸ä¸ªrsa_public_key.pemæ件ä¸ã
ãã好äºï¼ç°å¨å·²ç»æäºææçä¸è¥¿ï¼å
çç¾åå½æ°ï¼
ããå¤å¶ä»£ç
ãã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.$prestrçå
容åMD5ä¸æ ·ï¼åè§æåï¼
ãã2.$signæ¯æ¯ä»å®æ¥å£è¿åçsignåæ°ç¨base64_decode解ç ä¹åçäºè¿å¶
ãã3.éªç¾ç¨æ¯ä»å®å
¬é¥
ãã4.è¿ä¸ªå½æ°è¿åä¸ä¸ªå¸å°å¼ï¼ç´æ¥åè¯ä½ ï¼éªç¾æ¯å¦éè¿
ããæ¯ä»å®å®æ¹æä¾çPHPçSDK demoä¸åªå¯¹MD5å å¯æ¹å¼è¿è¡äºå¤çï¼ä½android 端åios端 请æ±æ¯ä»å®å å¯æ¹å¼åªè½ç¨RSAå å¯ç®æ³ï¼è¿æ¶æå¡ç«¯PHPå°±æ æ³éªè¯ç¾åäºï¼æ以éè¦å¯¹demoè¿è¡ä¸äºä¿®æ¹ã
ãã1ãä¿®æ¹alipay_notify.class.phpæ件
ããverifyNotify å½æ°ç¬¬46è¡
ãã$isSign = $this->getSignVeryfy($_POST, $_POST["sign"]);
ããæ¹æ
ãã$isSign = $this->getSignVeryfy($_POST, $_POST["sign"], $_POST["sign_type"]);
ããverifyReturn å½æ°ç¬¬83è¡
ãã$isSign = $this->getSignVeryfy($_GET, $_GET["sign"]);
ããæ¹æ
ãã$isSign = $this->getSignVeryfy($_GET, $_GET["sign"], $_GET["sign_type"]);
ããgetSignVeryfy å½æ° 116è¡
ããfunction getSignVeryfy($para_temp, $sign) {
ããæ¹æ
ããfunction getSignVeryfy($para_temp, $sign, $sign_type) {
ããgetSignVeryfy å½æ° 127è¡
ããswitch (strtoupper(trim($this->alipay_config['sign_type']))) {
ããcase "MD5" :
ãã$isSgin = md5Verify($prestr, $sign, $this->alipay_config['key']);
ããbreak;
ããdefault :
ãã$isSgin = false;
ãã}
ããæ¹æ
ããswitch (strtoupper(trim($sign_type))) {
ããcase "MD5" :
ãã$isSgin = md5Verify($prestr, $sign, $this->alipay_config['key']);
ããbreak;
ããcase "RSA" :
ãã$isSgin = rsaVerify($prestr, $sign);
ããbreak;
ããdefault :
ãã$isSgin = false;
ãã}
ãã2ãæ°å»ºä¸ä¸ªalipay_rsa.function.phpæ件
ããå¤å¶ä»£ç
ãã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 ?>
温馨提示:答案为网友推荐,仅供参考