zoukankan      html  css  js  c++  java
  • AES加解密 linux 下出现解密失败问题

    windows 加解密正常,linux 下解密失败。报以下错误:

    javax.crypto.BadPaddingException: Given final block not properly padded

    问题点出现在密钥生成上:

    代码如下:

    protected SecretKeySpec genSecretKeySpec() throws DubheException{
            if (getPs() == null) {
                throw new DubheException("未配置密钥!");
            }
            KeyGenerator kgen = null;
            try {
                kgen = KeyGenerator.getInstance(getAlgorithm());
                kgen.init(getKeyLen(), new SecureRandom(getPs().getBytes()));  
                SecretKey secretKey = kgen.generateKey();  
                byte[] enCodeFormat = secretKey.getEncoded();  
                SecretKeySpec key = new SecretKeySpec(enCodeFormat, getAlgorithm());
                return key;
            } catch (NoSuchAlgorithmException e) {
                throw new DubheException("未找到算法类型!", e);
            } 
        }

    此方式表现为:在windows 下密钥生成不变,在linux下生成变化的密钥,导致解密失败。

    改成如下方式问题得到解决:

    @Override
        protected SecretKeySpec genSecretKeySpec() throws DubheException{
            if (getPs() == null) {
                throw new DubheException("未配置密钥!");
            }
            KeyGenerator kgen = null;
            try {
                kgen = KeyGenerator.getInstance(getAlgorithm());
                
                SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");
                secureRandom.setSeed(getPs().getBytes());;
                kgen.init(getKeyLen(), secureRandom);
                SecretKey secretKey = kgen.generateKey();  
                byte[] enCodeFormat = secretKey.getEncoded();  
                SecretKeySpec key = new SecretKeySpec(enCodeFormat, getAlgorithm());
                return key;
            } catch (NoSuchAlgorithmException e) {
                throw new DubheException("未找到算法类型!", e);
            } 
        }

    原因分析:

      SecureRandom 实现完全随操作系统本身的內部状态,除非调用方在调用 getInstance 方法之后又调用了 setSeed 方法;

  • 相关阅读:
    一个判断浏览器类型的JS
    asp中输出xml “文本内容中发现无效字符”问题的解决(转)
    Excel VBA工程密码之最简单破解法
    爆破AspriseOCR 4.0
    vi编辑器的使用(转载)
    数据挖掘(转载)
    简单工厂模式(SimpleFactory)
    工厂方法模式(Factory Method)
    让gridview默认处于编辑模式并取得编辑后的值
    GDB调试精粹及使用实例(转载)
  • 原文地址:https://www.cnblogs.com/hf-china/p/7929431.html
Copyright © 2011-2022 走看看