收藏
回答

微信支付商家转账大于2000需要user_name加密后问题

异常提示:javax.crypto.IllegalBlockSizeException: Data must not be longer than 214 bytes,根据文档给的示例采用的是RSA加密方式

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

3 个回答

  • 旺哆
    旺哆
    02-28

    sdk是自动加密的吗?

    02-28
    有用
    回复 1
    • 支付社区运营
      支付社区运营
      03-03
      商家转账到零钱sdk底层会自动加密。传明文即可
      03-03
      回复
  • Memory (私信不回复)
    Memory (私信不回复)
    02-28

    是不是有用sdk?如果sdk加密一次后你二次加密就会有这个问题

    02-28
    有用
    回复 4
    • 旺哆
      旺哆
      02-28
      . 加密示例
      开发者应当使用微信支付公钥,对上送的敏感信息进行加密。
      大部分编程语言支持RSA公钥加密。你可以参考示例,了解如何使用您的编程语言实现敏感信息加密。
      示例代码
      JAVA
      1public static String rsaEncryptOAEP(String message, PublicKey publicKey)
      2throws IllegalBlockSizeException, IOException {
      3 try {
      4 Cipher cipher = Cipher.getInstance("RSA/ECB/OAEPWithSHA-1AndMGF1Padding");
      5 cipher.init(Cipher.ENCRYPT_MODE, publicKey);
      6 byte[] data = message.getBytes("utf-8");
      7 byte[] cipherdata = cipher.doFinal(data);
      8 return Base64.getEncoder().encodeToString(cipherdata);
      9 } catch (NoSuchAlgorithmException | NoSuchPaddingException e) {
      10 throw new RuntimeException("当前Java环境不支持RSA v1.5/OAEP", e);
      11 } catch (InvalidKeyException e) {
      12 throw new IllegalArgumentException("无效的公钥", e);
      13 } catch (IllegalBlockSizeException | BadPaddingException e) {
      14 throw new IllegalBlockSizeException("加密原串的长度不能超过214字节");
      15 }
      16}参考的是这个示例微信官方给的
      02-28
      回复
    • Memory (私信不回复)
      Memory (私信不回复)
      02-28回复旺哆
      你有用SDK吗?还是只是用了上面示例?
      02-28
      回复
    • 旺哆
      旺哆
      02-28
      用了sdk
      02-28
      回复
    • Memory (私信不回复)
      Memory (私信不回复)
      02-28回复旺哆
      用了sdk就不需要二次操作加密了,一般sdk都会自己加密的
      02-28
      回复
  • 北望沣渭
    北望沣渭
    02-28

    你用的sdk,可能已经为你做过「加密」了,密文base64字符串长度一般是384字节

    02-28
    有用
    回复 3
    • 旺哆
      旺哆
      02-28
      sdk是自动加密的吗?
      02-28
      回复
    • 旺哆
      旺哆
      02-28回复旺哆
      . 加密示例
      开发者应当使用微信支付公钥,对上送的敏感信息进行加密。
      大部分编程语言支持RSA公钥加密。你可以参考示例,了解如何使用您的编程语言实现敏感信息加密。
      示例代码
      JAVA
      1public static String rsaEncryptOAEP(String message, PublicKey publicKey)
      2throws IllegalBlockSizeException, IOException {
      3 try {
      4 Cipher cipher = Cipher.getInstance("RSA/ECB/OAEPWithSHA-1AndMGF1Padding");
      5 cipher.init(Cipher.ENCRYPT_MODE, publicKey);
      6 byte[] data = message.getBytes("utf-8");
      7 byte[] cipherdata = cipher.doFinal(data);
      8 return Base64.getEncoder().encodeToString(cipherdata);
      9 } catch (NoSuchAlgorithmException | NoSuchPaddingException e) {
      10 throw new RuntimeException("当前Java环境不支持RSA v1.5/OAEP", e);
      11 } catch (InvalidKeyException e) {
      12 throw new IllegalArgumentException("无效的公钥", e);
      13 } catch (IllegalBlockSizeException | BadPaddingException e) {
      14 throw new IllegalBlockSizeException("加密原串的长度不能超过214字节");
      15 }
      16}
      02-28
      回复
    • 旺哆
      旺哆
      02-28
      我参考的是这个示例
      02-28
      回复
登录 后发表内容