为什么这个AES实现会解包并再次包装密钥?

时间:2009-11-19 10:41:33

标签: java encryption aes

我正在尝试从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密钥是什么意思?

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分: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,它们是完全相同的。

所以你可以忽略这个解释。它没有更清楚。

答案 2 :(得分:-1)

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