请告诉我使用Java进行加密和解密的数据长度。在指定DES / CBC / PKCS5Padding的情况下执行Cipher.dofinal()时,数据长度为8字节的未加密数据在加密后变为16字节。有没有办法把它变成8字节?
发布于 2021-03-20 21:23:30
DES已过时,不再安全。AES要好得多。
AES和DES都是块密码,它们以块的形式加密数据。DES块是64位,8个字符,而AES使用128位块,16个字符。当您将明文分成块时,可能会在末尾留下一些奇怪的字符。加密填充用于将明文扩展到下一块边界。在您的示例中,您将使用PKCS5填充来完成此操作。
对于DES中的8字节明文,您的填充在加密之前会添加8个字节,因为总是会添加填充。因此,您需要16字节的密文:8字节的加密明文和8字节的加密填充。
如果您确实只需要8个字节的密文,那么可以使用NoPadding或您系统中的任何等效代码。这将省略任何填充,但会泄漏有关明文长度的信息。
从安全的角度来看,您最好切换到填充的AES并接受16字节的密文。
https://stackoverflow.com/questions/66720752
复制相似问题