为什么 PHP 和 Java 对于 SHA1withRSA 签名的结果不一致

2021-03-06 23:01:22 +08:00
 unbeau
求大神解答,万分感谢

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);
2348 次点击
所在节点    PHP
4 条回复
unbeau
2021-03-06 23:04:14 +08:00
求大神帮助 java 的签名是正确的
flamhaze5946
2021-03-07 11:07:44 +08:00
你同一种语言测试两次也是不一样的
fiypig
2021-03-07 11:15:15 +08:00
RSA 是不是要分段加解密啊?
unbeau
2021-03-07 14:46:48 +08:00
已经解决了,是加密的字符创多了个空格。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/759163

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX