【问题标题】:AES/CBC/PKCS5Padding vs AES/CBC/PKCS7Padding with 256 key size performance javaAES/CBC/PKCS5Padding 与 AES/CBC/PKCS7Padding 与 256 密钥大小性能 java
【发布时间】:2014-01-13 05:42:55
【问题描述】:

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

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

所以我想知道

  1. 对于上述配置,AES/CBC/PKCS7Padding 的性能会比AES/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);

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 如果我使用AES/CBC/PKCS7Padding而不是AES/CBC/PKCS5Padding会有什么不同
    • @dbw 我不这么认为。但可以肯定的是,请查看文档。
    • 但我不认为 AES/CBC/PKCS5Padding 被解释为 AES/CBC/PKCS7Padding 好像我读过 Cipher 它被提到 AES/CBC/PKCS5Padding (128) 所以这一定是定义了一些机制
    • @dbw 有趣的是,标准名称文档只讨论了PKCS5Padding。似乎是一个历史错误,因为这在DES 次是正确的。实际上这两种填充算法是相同的,唯一的区别是 PKCS7 有块长度作为参数,而 PKCS5 固定为 8 个字节。
    • PKCS5Padding 在密码规范中被解释为 PKCS7Padding 的同义词。它只是一个历史产物,Sun 决定简单地假装 PKCS5Padding 与 PKCS7Padding 的含义相同,用于块大小大于 8 字节的块密码,而不是改变它。
    猜你喜欢
    • 2014-07-11
    • 2022-11-16
    • 2022-08-17
    • 2013-08-11
    • 1970-01-01
    • 1970-01-01
    • 2016-08-21
    • 1970-01-01
    • 2021-08-13
    相关资源
    最近更新 更多