1.场景

  在做微信支付退款通知接口时,微信对通知的内容做了加密,并且指定用 AES256 解密,官方指定的解密方式如下:

    

2.导包

<!-- https://mvnrepository.com/artifact/org.bouncycastle/bcprov-jdk15on -->
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
<version>1.60</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.jasypt/jasypt -->
<dependency>
<groupId>org.jasypt</groupId>
<artifactId>jasypt</artifactId>
<version>1.9.</version>
</dependency>

3.解密

  说明:方法中参数 reqInfo 就是退款结果通知接口中的 req_info 字段值

private String descrypt(String reqInfo) throws NoSuchPaddingException, NoSuchAlgorithmException, NoSuchProviderException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException {
byte[] reqInfoB = Base64.decodeBase64(reqInfo);
String key_ = DigestUtils.md5Hex(WXPayConfig.getInstance().getKey()).toLowerCase(); if (Security.getProvider("BC") == null){
Security.addProvider(new BouncyCastleProvider());
}
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS7Padding", "BC");
SecretKeySpec secretKeySpec = new SecretKeySpec(key_.getBytes(), "AES");
cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);
return new String(cipher.doFinal(reqInfoB));
}

4.结果

  

5.上述过程之后在win本地运行没问题了,但是放到 linux 之后报错如下:

  java.security.InvalidKeyException: Illegal key size or default parameters

  最终还是按网友的方法解决:替换jre包:local_policy.jar,US_export_policy.jar

  5.1.下载

    需要注意的是:替换的jar包版本需要与jre版本一致,各个版本包连接

      jdk8:http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html

      jdk7:http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html

      jdk6:http://www.oracle.com/technetwork/java/javase/downloads/jce-6-download-429243.html

      jdk5:http://download.csdn.net/detail/scs2043/4237335

  5.2.替换路径

    %JAVE_HOME%\jre\lib\security

6.参考

  解密方式:https://blog.csdn.net/qq_25958497/article/details/87937020

  报错解决(报错内容“No such provider: BC”):https://www.cnblogs.com/wswang/p/7718150.html

  替换包参考:https://blog.csdn.net/tomatocc/article/details/85096911

最新文章

  1. sublime 2/3 for mac link to command
  2. [.net 面向对象编程基础] (6) 基础中的基础——运算符和表达式
  3. HTML中一些基本的标签用法
  4. Unity3D中定时器的使用
  5. javascript的排序算法
  6. 子查询注意这几点, 就可以写出好的sql语句
  7. C# Winform 涉及的拖放操作总结
  8. php 对象的执行
  9. QT 事件过滤器 eventFilter
  10. DAT文件怎样打开
  11. Java,js,多条件split字符分割
  12. spring交易声明的几个传播特性
  13. AngularJs开发——指令与控制器间的通信
  14. apigateway-kong(一)简介及部署
  15. 10分钟搭建服务器集群——Windows7系统中nginx与IIS服务器搭建集群实现负载均衡
  16. 【373】LabelEncoder 相关
  17. 部署Spring web项目遇到的问题及解决方案
  18. bzoj 3926
  19. android studio 使用问题记录
  20. Git操作行

热门文章

  1. leetcode 361.Bomb Enemy(lintcode 553. Bomb Enemy)
  2. 004-行为型-01-策略模式(Strategy)
  3. layui时间控件闪退的问题
  4. 在EXE和DLL中,FindResource的区别
  5. spring 理解Spring AOP 一个简单的约定游戏
  6. 【CSS3练习】transform 2d变形实例练习
  7. 原生JavaScript常用本地浏览器存储方法三(UserData IE Only)
  8. node.js web应用优化之读写分离
  9. Shell脚本互斥设置
  10. CTF 资源