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

  • 相关阅读:
    JVM发生OOM调优
    行云创新完成B轮融资,阿里云独家投资
    行云创新直播回顾:DDD“爱”上Dapr
    如何通过Dapr快速实现DDD?
    通过Dapr快速落地DDD,实现高并发
    上K8s,研发团队如何从容一点?
    直播来了!等你围观!聊聊服务网格那些事儿
    服务网格出现流量故障该咋办?SolarMesh发布重大功能
    mysql 授权问题
    Centos Mysql5.7 安装
  • 原文地址:https://www.cnblogs.com/hf-china/p/7929431.html
Copyright © 2011-2022 走看看