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

生のバイトは、おそらくキーオブジェクトのストレージ表現を指します。
通常、キーオブジェクトを作成し、それを格納するフォームを取得します(java.security.Key#getEncoded()を参照してください。そのストレージ/交換表現は、エンコード情報のないバイト配列、つまり「生のバイト」です。

これらの生のバイトは、キーオブジェクトを再度インスタンス化するために使用できます。
プログラムが以前に作成したものを使用する代わりに、キーオブジェクトを再インスタンス化する理由は私にはわかりません。
それはおそらくプログラムのコードを見ることによってのみ答えることができます。

于 2009-11-19T11:28:22.847 に答える
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キーです。2番目のステップは何もしません。skeyとskeySpecの内部を見ると、それらは同じです。

したがって、説明は無視してかまいません。それはそれ以上明確にはなりません。

于 2009-11-19T15:48:25.833 に答える
-1

AES:AdvancedEncyptionStandardキーは文字列です。したがって、これは文字列を生成するようです。次に、それをバイトの配列に変換する可能性があります(おそらくストレージ用)。次に、バイトの配列から文字列を再作成します。

于 2009-11-19T10:49:49.350 に答える