这个接口https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay_yhk.php?chapter=25_2
证书已经下载,公钥已经转PKCS#8
提示:解密真实姓名或银行卡号出错
这要怎么解决,调试了2天
下面是加密代码:
public static PublicKey getPublicKey(String publicKeyPath) {
try {
String key = new String(Files.readAllBytes(Paths.get(publicKeyPath)), "utf-8");
String publicKey = key
.replace("-----BEGIN PUBLIC KEY-----", "")
.replace("-----END PUBLIC KEY-----", "")
.replaceAll("\\s+", "");
KeyFactory kf = KeyFactory.getInstance("RSA");
return kf.generatePublic(new X509EncodedKeySpec(Base64.getDecoder().decode(publicKey)));
} catch (Exception ex) {
ex.printStackTrace();
return null;
}
}
//公钥加密
public static String encrypt(String content, PublicKey publicKey) {
try {
// RSA/ECB/OAEPWithSHA-1AndMGF1Padding 微信支付 打款到银行卡
Cipher cipher = Cipher.getInstance("RSA/ECB/OAEPWITHSHA-1ANDMGF1PADDING");//java默认"RSA"="RSA/ECB/PKCS1Padding"
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte[] output = cipher.doFinal(content.getBytes());
BASE64Encoder encoder = new BASE64Encoder();
return encoder.encode(output);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
已经解决了,谢谢回答的各位大哥!加密算法有问题,我换一种方式就好了!
看不懂你为啥要去解密这个信息,你都没对应的私钥
非对称RSA的公私钥是配对的,使用平台提供的公钥加密的密文,是无法用「商户API私钥」解密的,简单理解就是公钥单向加密,无私钥无法解密
1. 是否是最新的加密公钥(平台没说有效期,得至少保证俩小时内的);
2. 请求的XML密文是否是CDATA包裹的(或转译后的);
再不行,把http返回的头 request-id 获取到,找在线技术客服咨询:https://support.pay.weixin.qq.com/