• Illegal key size or default parameters


    最近在做微信退款解密的时候,Liunx服务器出现这个错误Illegal key size or default parameters 原因是Java几乎各种常用加密算法都能找到对应的实现。因为美国的出口限制,Sun通过权限文件(local_policy.jar、US_export_policy.jar)做了相应限制。因此存在一些问题:●密钥长度上不能满足需求(如:java.security.InvalidKeyException: Illegal key size or default parameters),然后网上说要通过替换JDK/jre/lib/security的local_policy.jarUS_export_policy.jar,然后我去官网下但是出现404,后面找了很多资源,才找到这两个文件的下载地址,在替换之间,最好备份原先的jdk的就有的文件,确保不丢失。

    文件下载地址: https://download.oracle.com/otn-pub/java/jce/8/jce_policy-8.zip

    可是因为我们是Liunx 容器部署,而且要替换这个两个文件比较麻烦,后面根据官网查阅资料并解决。

    链接地址:https://www.oracle.com/technetwork/java/javase/8u151-relnotes-3850493.html

    在jdk.1.8u151 版本可以通过 Security.setProperty("crypto.policy", "unlimited"); 取消sun的权限限制

     注意:jdk使用jdk.1.8u151

     以下是解密的代码

    
    
    import javax.crypto.Cipher;
    import javax.crypto.spec.SecretKeySpec;
    import java.security.Security;
    import java.util.Base64;
    import org.bouncycastle.jce.provider.BouncyCastleProvider;

    @Component
    public class AESUtils {
     /**
         * 密钥算法
         */
        private static final String ALGORITHM = "AES";
        /**
         * 加解密算法/工作模式/填充方式
         */
        private static final String ALGORITHM_MODE_PADDING = "AES/ECB/PKCS7Padding";
    
    
       static {
            Security.addProvider(new BouncyCastleProvider());
            Security.setProperty("crypto.policy", "unlimited");
        }
    
    
      /**
         * 退款报文加密
         *
         * @param paySecret   秘钥
         * @param responseStr 微信返回的支付串
         * @return  其中的WXPayUti 是通过微信官网的下载的工具类 https://pay.weixin.qq.com/wiki/doc/api/download/WxPayAPI_JAVA.zip
         * @throws Exception
         */
        private String decryptionMessage(String paySecret, String responseStr) throws Exception {
            final Base64.Decoder decoder = Base64.getDecoder();
            SecretKeySpec key = new SecretKeySpec(WXPayUtil.MD5(paySecret).toLowerCase().getBytes(), ALGORITHM);
            Cipher cipher = Cipher.getInstance(ALGORITHM_MODE_PADDING, "BC");
            cipher.init(Cipher.DECRYPT_MODE, key);
            String decoderXml = new String(cipher.doFinal(decoder.decode(responseStr)), "UTF-8");
            return decoderXml;
        }
    }
  • 相关阅读:
    派遣函数
    英文论文(1)
    状态机和时序图的“前世姻缘”
    线程安全性:原子性,安全性,加锁机制
    多线程程序中操作的原子性
    win10下安装Centos7总笔记!
    分支限界法---旅行售货员问题
    PHP+ajax聊天室源码!支持长轮循跟定时请求两种
    elasticsearch配置优化
    hbase region与内存的关系
  • 原文地址:https://www.cnblogs.com/uqing/p/12953023.html
Copyright © 2020-2023  润新知