【问题标题】:how to convert byte array to key format?如何将字节数组转换为密钥格式?
【发布时间】:2010-05-06 03:33:35
【问题描述】:

我想知道如何将字节数组转换为键。

我正在做 AES 加密/解密。而不是生成密钥,我想使用我生成的字节数组。

byte[] clientCK = Milenage.f3(sharedSecret16, RANDbytes, opc);  

假设我有一个名为 clientCK 的字节数组,如上所述。我想在 AES 加密中使用它,如下所示。

Cipher c = Cipher.getInstance("AES");
c.init(Cipher.ENCRYPT_MODE, key);
byte[] encValue = c.doFinal(valueToEnc.getBytes());
String encryptedValue = new BASE64Encoder().encode(encValue);

因此,我需要将该字节数组 clientCK 转换为密钥格式。请帮忙。

【问题讨论】:

  • 我也有同样的问题。我正在使用 Bouncy Castle PBKDF1 算法生成密钥;它是一个 256 位的密钥,IV 是 128 位的。我尝试使用 SecretKeySpec,但 c.init 抛出了非法密钥大小的异常。

标签: java key bytearray aes


【解决方案1】:

您可能想使用SecretKeySpec

public SecretKeySpec(byte[] key, String algorithm)

从给定的字节数组构造一个密钥。

【讨论】:

  • 我和 OP 有同样的问题。我尝试使用 SecretKeySpec,但它报告的密钥大小非法。我正在使用 AES,就像 OP,但我的密钥大小是 256 位,IV 是 128 位。
【解决方案2】:

U 将在所需位置要求下面的策略 jar 名称,这为某些算法提供更高的密钥大小/并为特定国家/地区设置更高的算法(根据美国出口加密政策),例如我 PC 上的 JDK 目录。 C:\Program Files\Java\jdk1.5.0_17\jre\lib\security

您还需要使用正确的加密提供程序设置 java.security 文件,如下面的 java.security 文件中所示(在上面的目录中)

Example :     security.provider.7=org.bouncycastle.jce.provider.BouncyCastleProvider
              security.provider.6=com.sun.crypto.provider.SunJCE
             security.provider.5=cryptix.provider.Cryptix 

如上所示的安全提供程序编号说明了相应 JVM 使用底层安全提供程序的顺序。在上面的示例中,设置了 3 个安全提供程序以用于底层 JVM,它们是 BouncyCastle、SunJCE 和 Cryptix。

local_policy.jar 和 US_export_policy.jar 文件放在你的 JVM lib\security 目录中

您将需要安装上面列出的 Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files。如果不安装,由于美国出口法律,密钥大小受到限制。(上述错误也可能是因为真的错误应用程序中给出的密钥大小,例如 AES 密钥大小在应用程序中以 20 字节而不是 32 字节给出)

【讨论】:

    猜你喜欢
    • 2012-12-21
    • 1970-01-01
    • 2013-09-25
    • 1970-01-01
    • 1970-01-01
    • 2014-09-18
    • 2020-09-07
    • 1970-01-01
    • 2020-10-26
    相关资源
    最近更新 更多