AES/CBC/PKCS5Padding vs AES/CBC/PKCS7Padding with 256 key size performance java

2022-09-01 09:41:53

我目前正在使用256字节密钥大小的Java加密文件,但是在搜索时,我发现在stackexchange PKCS#5-PKCS#7填充中,并提到它,AES/CBC/PKCS5Padding

PKCS#5 填充是 8 字节块大小的 PKCS#7 填充的子集

所以我想知道

  1. 对于上述配置,性能会更好吗?AES/CBC/PKCS7PaddingAES/CBC/PKCS5Padding
  2. 我们如何在Java中配置所提到的块大小

    PKCS#7 填充适用于 1 到 255 字节之间的任何块大小。

我的示例代码是,

SecureRandom rnd = new SecureRandom();
IvParameterSpec iv = new IvParameterSpec(rnd.generateSeed(16));

KeyGenerator generator = KeyGenerator.getInstance("AES");
generator.init(256);
SecretKey k = generator.generateKey();

Cipher c = Cipher.getInstance("AES/CBC/PKCS5Padding");
c.init(Cipher.ENCRYPT_MODE, k, iv);

答案 1

块大小是使用的密码算法的属性。对于 AES,它始终为 16 字节。

因此,严格来说,PKCS5Padding不能与AES一起使用,因为它仅定义为8字节的块大小。我假设,AES/CBC/PKCS5Padding在内部被解释为AES/CBC/PKCS7Padding。

这些填充方案之间的唯一区别是 PKCS7Padding 将块大小作为参数,而对于 PKCS5Padding,它固定为 8 个字节。当块大小为 8 个字节时,它们的作用完全相同。


答案 2

推荐