带有 PKCS#5 填充的 AES

AES with PKCS#5 padding

在很多地方,我看到 Java 代码使用带有 PKCS#5 填充的 AES。我不明白这怎么可能。

PKCS#5 填充用于块大小 <= 8 字节的密码。 AES 的块大小为 16 字节。所有使用带有 PKCS#5 的 AES 的代码都是错误的吗?还是框架在内部使用 PKCS#7?有问题的框架将由 Sun 在 Java、JCE 和 BouncyCastle 中提供。

该代码确实使用了 PKCS#7。指定 "PKCS5Padding" 的原因很可能是由于与旧 DES 和 3DES 密码的兼容性。请注意,PKCS#5 填充恰好是 8 个字节,而不是更少。为了兼容性,Bouncy Castle 通常遵循 Sun/Oracle 提供程序,尽管您也可以使用更正确的 "PKCS7Padding" 作为 Bouncy Castle 提供程序。

更多信息on the crypto site(免责声明:指向我自己的热门Q/A)。