java - 我在解包时收到 'CKR_WRAPPED_KEY_INVALID' 错误。如何将 AES key 解包为 DES2 key ?

标签 java cryptography aes pkcs#11 des

首先,我通过 AES/CBC 算法使用另一个 AES key 封装了一个 AES key 。然后,我尝试通过将 key 类型传递为 DES2,使用 AES/CBC 算法将该 AES key 解包为 DES2 key 。但当我打开包装时,我得到了 CKR_WRAPPED_KEY_INVALID 错误。

重现步骤:

  1. 创建 2 个 AES key 。让我们将第一个键称为“要包装的键”,将第二个键称为“包装键”;
  2. 通过任何 API 或其他方式使用第二个 key 和 AES/CBC 算法封装第一个 key ;
  3. 然后您将获得包装后的 key 作为输出;
  4. 现在使用第二个 key (包装 key )和 AES/CBC 算法解开包装 key (即输出);
  5. 解包时,需要输入 key 类型;
  6. 将 key 类型指定为 DES2;
  7. 您将收到 CKR_WRAPPED_KEY_INVALID 错误。

请帮我解决这个问题。

注意:如果我使用 TDES/ECB 算法执行相同的步骤,则不会收到任何错误。它工作正常。

最佳答案

罪魁祸首可能是 DES 奇偶校验。手动设置奇偶校验或使用使用 KeyGenerator 创建的 3DES key 的前 16 个字节作为 AES key 的输入。

DES 的奇偶校验由每个字节的最低有效位确定。应用奇偶校验后,每个字节应设置奇数个位(为 1)。

关于java - 我在解包时收到 'CKR_WRAPPED_KEY_INVALID' 错误。如何将 AES key 解包为 DES2 key ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59714243/

相关文章:

java - LocalDateTime.format(DateTimeFormatter) 和 DateTimeFormatter.format(TemporalAccessor) 有什么区别?

cryptography - 使用HKDF的目的是什么?

java - 使用 AES CBC Java 加密

Java SunPKCS11 通过网络访问 USB 加密 token

android - 在 python 和 android 中通过 AES 算法加密和解密

java - 在代码中解密 AES 加密的授权 token 方法时 Jar 崩溃。 hs_err _pid 文件提到 arrayof_jbyte_fill

java - IncompleteClassChangeError : Class hbase. client.ConnectionManager$HConnectionImplementation 未实现接口(interface) hbase.client.Connection

java - 如何在android中获得2次之间的差异

java - 从 Iterator<T> 转换为 Iterator<U>,其中 T 是 U 的子类

java - Java AES 加密是否符合 FIPS 140-2?