-1

基本的に、ユーザー指定の文字列を 256 ビットのバイト配列にハッシュして、Java の AES256 の実装を使用してデータを暗号化するときにキーとして使用しようとしています。この実行時例外が発生し続けます:

java.security.InvalidKeyException: Illegal key size or default parameters

一部のバイトが 8 ビット長ではないため、全体のキー サイズが 256 ビットではないことが原因だと思われます。左側に 0 を埋め込む方法を考えていたので、キーの長さを確認してください。

編集:

これは、値からメッセージ ダイジェストへの変換です。

MessageDigest hasher = MessageDigest.getInstance("SHA-256");
// Use the factory method to get the SHA-256 instance of a MessageDigest object.
hasher.update(input.getBytes());
// Update the message digest object with the bytes of the value to hash.
return hasher.digest();
// Hash the value and return the string representation.

これは、「hasher」からの出力を使用した暗号化です。

SecretKeySpec key = new SecretKeySpec(keyBytes, "AES");
cryptoTool.init(Cipher.ENCRYPT_MODE, key); // This is where the error fires.

return String.valueOf(cryptoTool.doFinal(plaintext.getBytes()));
4

1 に答える 1

-1

おそらく、文字列は 32 文字ではないのでしょうか? または、ASCII 以外の文字を含む可能性のある文字列がありますか?

次の関数は文字列を受け取り、それから 32 バイトの配列を生成します。

String to32Bytes(String s) {
   return Arrays.copyOf(s.getBytes(), 32);
}

文字列ハッシュ アルゴリズムは一般に、はるかに安全なキーを提供するため、これは暗号化の優れた方法ではないことに注意してください。

于 2013-02-14T22:47:31.873 に答える