收藏
回答

解密真实姓名或银行卡号出错?

这个接口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;
}


回答关注问题邀请回答
收藏

3 个回答

  • 桃子
    桃子
    10-24

    已经解决了,谢谢回答的各位大哥!加密算法有问题,我换一种方式就好了!

    10-24
    有用
    回复
  • Memory
    Memory
    10-23

    看不懂你为啥要去解密这个信息,你都没对应的私钥

    10-23
    有用
    回复
  • 北望沣渭
    北望沣渭
    10-23

    非对称RSA的公私钥是配对的,使用平台提供的公钥加密的密文,是无法用「商户API私钥」解密的,简单理解就是公钥单向加密,无私钥无法解密

    10-23
    有用
    回复 2
    • 桃子
      桃子
      10-23
      两个api接口的,第一个接口微信生成了公私钥给我们,,我们用公钥加密银行卡和户名,调用第二个接口发给微信那边
      10-23
      回复
    • 北望沣渭
      北望沣渭
      10-23回复桃子
      代码看着没啥问题,按这个思路再排查排查:
      1. 是否是最新的加密公钥(平台没说有效期,得至少保证俩小时内的);
      2. 请求的XML密文是否是CDATA包裹的(或转译后的);
      再不行,把http返回的头 request-id 获取到,找在线技术客服咨询:https://support.pay.weixin.qq.com/
      10-23
      回复
登录 后发表内容