0

我试图从 AES 实现代码中理解这条评论:

/**
 * This program generates a AES key, retrieves its raw bytes, and
 * then reinstantiates a AES key from the key bytes.
 * The reinstantiated key is used to initialize a AES cipher for
 * encryption and decryption.
 */

我不明白以下几点:

  1. AES 密钥的原始字节是什么意思?
  2. 从密钥字节重新实例化 AES 密钥是什么意思?
4

3 回答 3

1

我想你正在阅读这个网页,

http://java.sun.com/developer/technicalArticles/Security/AES/AES_v1.html

我们也有根据这个例子生成 AES 密钥的代码,但我认为作者有点困惑。它生成这样的密钥,

    kgen = KeyGenerator.getInstance("AES");
        kgen.init(128);
        // Generate the secret key specs.
        SecretKey skey = kgen.generateKey();
        byte[] raw = skey.getEncoded();
        SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");

skey 已经是您可以使用的 AES 密钥。第二步什么都不做。如果您查看 skey 和 skeySpec 内部,它们是相同的。

所以你可以忽略解释。它并没有使它更清楚。

于 2009-11-19T15:48:25.833 回答
1

原始字节可能是指密钥对象的存储表示。
通常您创建一个密钥对象,然后获取一个存储它的表单(查看java.security.Key#getEncoded()。该存储/交换表示是一个没有编码信息的字节数组 - 因此是“原始字节”。

然后可以使用这些原始字节再次实例化密钥对象。
我不清楚为什么程序会重新实例化关键对象而不是使用它之前创建的对象。
这可能只能通过查看程序的代码来回答。

于 2009-11-19T11:28:22.847 回答
-1

AES:高级加密标准密钥是一个字符串。所以这似乎生成了一个字符串。然后它可能会将其转换为字节数组(可能用于存储)。然后它从字节数组中重新创建字符串。

于 2009-11-19T10:49:49.350 回答