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

      

  • 相关阅读:
    注意力机制在CV领域的应用之SEnet
    知识蒸馏技术原理
    batchsize如何影响模型的性能
    docker网络 macvlan
    docker pull使用 代理
    auditd重启失败
    3.Golang的包导入
    2.golang应用目录结构和GOPATH概念
    使用git版本管理时的免密问题
    1.go语言目录结构
  • 原文地址:https://www.cnblogs.com/Marydon20170307/p/9455161.html
Copyright © 2011-2022 走看看