このコード行で何が起こっていますか?
SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
getInstance("PBKDF2WithHmacSHA1") 部分が特にわかりません
このコード行で何が起こっていますか?
SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
getInstance("PBKDF2WithHmacSHA1") 部分が特にわかりません
この風変わりな文字列は、使用する秘密鍵アルゴリズムを定義します。それは:
PBKDF2WithHmacSHA1 Hmac SHA1 を使用する PBKDF2
参考文献: Java Crypto Extension Guide Appending A
で
同様のアルゴリズム名を見つけましたが、どういうわけか PKCS5 バージョン 2 が利用可能/文書化されていなかった可能性があります (または、実際には brianegge によって示唆されているように、暗号化アイテムの一般的な問題である輸出制限の問題である可能性があります)。 .
アルゴリズム名はRFC3962 (Kerberos の AES) に表示されますが、これはあなたが念頭に置いているアプリケーションそのものではないかもしれませんが、定義されています)
Java の異なるディストリビューションには、異なる暗号が含まれています。これは、輸出制限と特許によるものです。コード行は、そのタイプのキーを作成できるファクトリを要求しています。
具体的には、PBKDF2WithHmacSHA1は、 PKCS5 v2.0にあるパスワードベースの鍵導出関数関数を使用して秘密鍵を構築します。
「PBKDF2」は、パスワードからキー マテリアルを取得するために使用されるPKCS #5で定義された機能です。
PBKDF2 は疑似乱数関数を必要とし、この場合、SHA-1 ハッシュに基づくメッセージ認証コード「HmacSHA1」が使用されます。
したがって、この行は工場を作成しています。ファクトリは、対称暗号化アルゴリズムまたはアルゴリズムSecretKey
のインスタンスのキーに使用できるオブジェクトを生成する場合があります。または、既存の の「透過的な」仕様を作成するために使用できます。Cipher
Mac
SecretKey
PBKDF2 について注意すべき重要な点の 1 つは、特定のアルゴリズムの秘密鍵を生成しないことです。これは、生成されたキーからシードを復元できないように、シード (パスワード) からキー「マテリアル」を生成する決定論的な方法です。必要なバイト数が生成されると、通常SecretKeySpec
は正しいアルゴリズム名でラップされます。
秘密鍵ファクトリのその他の標準名については、Java 暗号化アーキテクチャの標準名のドキュメントを参照してください。