为什么 PHP 和 Java 对于 SHA1withRSA 签名的结果不一致
PHP 源码:
$xmldata = ‘<?xml version=”1.0″ encoding=”GBK”?>
<AIPG>
<INFO>
<TRX_CODE>310001</TRX_CODE>
<VERSION>05</VERSION>
<DATA_TYPE>2</DATA_TYPE>
<LEVEL>5</LEVEL>
<MERCHANT_ID>200604000012282</MERCHANT_ID>
<USER_NAME>20060400001228204</USER_NAME>
<USER_PASS>111111</USER_PASS>
<REQ_SN>200604000012282-1526894131128</REQ_SN>
</INFO>
<FAGRA>
<MERCHANT_ID>200604000012282</MERCHANT_ID>
<BANK_CODE>0104</BANK_CODE>
<ACCOUNT_TYPE>00</ACCOUNT_TYPE>
<ACCOUNT_NO>62284811119386045775</ACCOUNT_NO>
<ACCOUNT_NAME>小虎</ACCOUNT_NAME>
<ACCOUNT_PROP>0</ACCOUNT_PROP>
<ID_TYPE>0</ID_TYPE>
<ID>320382111111086514</ID>
<TEL>187621116887</TEL>
<REMARK>单笔实时身份验证-备注字段</REMARK>
</FAGRA>
</AIPG>’;
openssl_pkcs12_read(file_get_contents(‘3.p12’), $certs, ‘111111’);
$signature = ”;
openssl_sign($xmldata, $signature, $certs[‘pkey’]);
$sign = bin2hex($signature);
java 源码:
Signature sign = Signature.getInstance(“SHA1withRSA”);
sign.initSign(prikey);
sign.update(msg.getBytes(encoding));
byte signed[] = sign.sign();
byte sign_asc[] = new byte[signed.length * 2];
Hex2Ascii(signed.length, signed, sign_asc);
signedStr = new String(sign_asc);