java - 在 AES 中收缩一些密文 block

标签 java encryption aes

我需要解密我有 key 的 AES 密文。问题是在 Java 中解密时,会发生错误:

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

我想这是数据库中持久化数据的问题,并且数据的某些部分已损坏(因为到目前为止没有问题,它不可能是关键)。密文长度为16的倍数。

两个问题:

  1. 如果我删除最后的 16 字节 block ,是否可以解密数据?
  2. 您还有其他建议吗?

最佳答案

如果您可以保证消息长度始终是 AES block 大小(16 字节)的倍数,则可以在加密时使用 NOPADDING 来省略填充规范的填充规范。如果您在不需要填充的模式(即 CTR 模式)下使用 AES,您也可以省略填充。

此外,您始终可以尝试使用 NOPADDING 解密填充的消息,但在某些时候您必须处理明文中的填充。

总的来说,您最好尝试弄清楚为什么您的邮件无法正确解密,而不是尝试解决方法。处理加密货币时的变通办法通常不是一个好主意。

关于java - 在 AES 中收缩一些密文 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19496025/

相关文章:

java - 在 tomcat 中的单个 webapp 文件夹上托管多个域

java - 如果我再次使其可用, "finalized"对象会发生什么情况?

java - 暴力破解问题

c++ - 无符号字符的字符串

java - 在线程安全的 Spring Controller 中查找队列中有多少请求

java - 在 FileSystem.liststatus 中过滤日志文件(_success 和 _log)

node.js - 在服务器端解密或验证 Azure 移动服务 token 上的签名

ios - Obj-C 和 VB.Net 之间的加密兼容性

javascript - 将 OpenSSL 命令行 AES 加密映射到等效的 NodeJS Crypto API

Node.js 加密 key 和 iv 以匹配 java SecretKeySpec/IvParameterSpec