zoukankan      html  css  js  c++  java
  • exception javax.crypto.BadPaddingException: Given final block not properly padded

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

    CreationTime--2018年8月10日14点46分

    Author:Marydon

    1.情景还原

      linux系统下,AES解密失败,报错信息如下:

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

      windows操作系统下,使用AES进行加密、解密正常;

      在Linux下,相同的待加密字符串,每次加密结果都不一样,而且解密失败。

    2.原因分析

      原因:由于key的生成方式不同引起的!

    // 强随机数生成器
    SecureRandom random = new SecureRandom(password.getBytes(ENCODING))
    

      上面的强随机数生成器,并没有指定算法名称,所以,会根据操作系统的生成随机数,

      由于windows和linux的内核不同,因此生成的随机数也会不同,所以导致解密失败!

    3.解决方案

      由于SecureRandom没有指定算法名称时,随机数的生成会随操作系统本身的內部状态而变化,

      所以,我们需要手动指定随机数的生成规则,如何实现?

      在调用 getInstance 方法之后,再调用 setSeed 方法;

    // 只适用windows
    // kgen.init(128, new SecureRandom(password.getBytes(ENCODING)));
    // 指定强随机数的生成方式
    // 兼容linux
    SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
    random.setSeed(password.getBytes(ENCODING));
    kgen.init(128, random);
    

      

  • 相关阅读:
    centos 7.0.1406 临时环境jenkins安装
    jenkins 登录提示无效
    ubuntu 16.04 安装完QQ后,更新或apt-get报错
    Web服务网站故障分析常用的命令
    在CentOS7中给docker加权限
    aliyun阿里云Maven仓库地址和其他地址
    python 安装 docker-copmose
    mysql 1055错误
    linux 添加用户
    firewall 开启服务
  • 原文地址:https://www.cnblogs.com/Marydon20170307/p/9455161.html
Copyright © 2011-2022 走看看