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 方法;

  • 相关阅读:
    layout(布局)组件
    accordion(分类)组件
    progressBar(进度条)组件
    LinkButton(按钮)组件
    tooltip(提示框)组件
    jQuery中animate( )的方法及$("body").animate({'scrollTop':top},500)不被Firefox支持问题的解决
    Echarts 图例交互事件
    JSON 语法
    jQueryMobile (一) :教程
    纯CSS3按钮变换效果
  • 原文地址:https://www.cnblogs.com/hf-china/p/7929431.html
Copyright © 2011-2022 走看看