AES / CBC / PKCS5Padding与AES / CBC / PKCS7Padding具有256个密钥大小的性能java

时间:2013-12-25 07:10:53

标签: java encryption aes pkcs#7 pkcs#5

我目前正在使用AES/CBC/PKCS5Padding来加密使用 256字节密钥大小的Java中的文件,但在搜索时我在stackexchange PKCS#5-PKCS#7 Padding上找到并且提到了,

  

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

所以我想知道

  1. 对于上述配置,AES/CBC/PKCS7Padding的效果会优于AES/CBC/PKCS5Padding吗?
  2. 我们如何在Java中配置块大小,如上所述
      

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

  3. 我的示例代码是,

    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 个答案:

答案 0 :(得分:29)

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

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

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