zoukankan      html  css  js  c++  java
  • 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;
        }
    }
  • 相关阅读:
    【URAL 1004】 floyd最小环
    【UVA 10881】 经典模拟题
    【HDU 1541】 树状数组(入门题)
    【HDU 4000】 树状数组
    【HDU 3391 && HDU 4431】 dfs+模拟
    【HDU 1058 & HDU 3199 类似丑数】 简单DP思想
    Acdream原创群赛3(部分题解)
    vfor实现双层循环嵌套
    vue获取当前时间并实时刷新时间
    vue+element ui实现左侧导航栏动态路由跳转
  • 原文地址:https://www.cnblogs.com/uqing/p/12953023.html
Copyright © 2011-2022 走看看