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);
    

      

  • 相关阅读:
    Unity资源打包之Assetbundle
    集社交与金融为一体,平安天下通怎样推动互联网金融创新?
    json和pickle模块
    sys模块
    os模块
    random模块
    datetime模块
    time模块
    logging模块

  • 原文地址:https://www.cnblogs.com/Marydon20170307/p/9455161.html
Copyright © 2011-2022 走看看