AES在windows下正常加解密,Linux下加密正常,解密异常(javax.crypto.BadPaddingException: pad block co

750 阅读1分钟

​​​本文已参与「新人创作礼」活动,一起开启掘金创作之路。​

javax.crypto.BadPaddingException: pad block corrupted 异常,恶心了我一个多小时。

废话不多说,上代码

将加密key转为byte数组片段

KeyGenerator keygen=KeyGenerator.getInstance("AES");
SecureRandom securerandom = new SecureRandom(tohash256Deal(key)); 替换为下面的两行
keygen.init(weishu, securerandom);

/**
 * SecureRandom 实现完全随操作系统本身的內部状态,
 * 除非调用方在调用 getInstance 方法之后又调用了 setSeed 方法;
 * 该实现在 windows 上每次生成的 key 都相同,
 * 但是在 solaris 或部分 linux 系统上则不同。
 * 所以  SecureRandom securerandom = new SecureRandom(tohash256Deal(key)); 替换为下面内容
 * 以适应linux的变化
 */

  SecureRandom securerandom = SecureRandom.getInstance("SHA1PRNG" );
  securerandom.setSeed(tohash256Deal(key));

其他地方不变,即可解决问题。

更多编程内容,请扫码关注《coder练习生》,如果觉得有用,也可赠送作者一杯咖啡