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

    一、报错

    写了一个加密方法,在Windows上运行没有问题,在Linux上运行时提示如下错误:

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

    二、定位

    查找资料,得到原因:

    1 SecureRandom实现完全随操作系统本身的內部状态。
    2 该实现在 windows 上每次生成的 key 都相同。
    3 但是在 solaris 或部分 linux 系统上则不同。

    通过日志打印,证实了这一点。

    三、解决

    资料里还有这么一句:

    SecureRandom ...除非调用方在调用 getInstance 方法之后又调用了 setSeed 方法。

    原代码如下:

    secureRandom = new SecureRandom(seed.getBytes());

    修改后的代码如下:

    1 SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");
    2 secureRandom.setSeed(seed.getBytes());

    在Linux上再次运行测试,不报错了。问题解决。

  • 相关阅读:
    网络
    DB
    DevOps
    Linux 进程管理:Supervisor
    Tomcat相关知识
    Tomcat配置和数据源配置
    Eclipse智能提示及部分快捷键
    Servlet工作原理
    蜗牛
    Servlet技术
  • 原文地址:https://www.cnblogs.com/yoyotl/p/6140183.html
Copyright © 2011-2022 走看看