0

任意のサイズのパスワードを指定して、ストリーム経由で受信しているファイルを暗号化する方法を探していますAES。簡単に始められるように、暗号化されたメッセージをファイルに書き込もうとしました。しかし、私は問題を抱えています:

  1. 任意のサイズのパスワードを定義できるようにしたいと考えています。「標準」形式でそれを達成することは可能ですか、それともパスワードを 2^k サイズにパディングする必要がありますか? 現在、一時的な「aaaaaaaaaaaaaaaa」パスワードを提供する問題を回避していますが、できるだけ早く削除したいと考えています。
  2. に長い文字列を書き込もうとするとcos、暗号化されたものがファイルに書き込まれます。しかし、「abc」のように小さいものを試してみると、何も書き込まれません。いくつかのパディング オプションを試してみましたが、役に立たないようです (PKCS5Padding、SSL3Padding、NoPadding)。

私が使用しているコードは次のとおりです。

    SecretKeySpec localSecretKeySpec = new SecretKeySpec("aaaaaaaaaaaaaaaa".getBytes(), "AES");
    Cipher localCipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
    localCipher.init(Cipher.ENCRYPT_MODE, localSecretKeySpec);

    CipherOutputStream cos = new CipherOutputStream(new FileOutputStream("abc"), localCipher);
    IOUtils.write("abc", cos);
    cos.flush();
4

2 に答える 2

4

この回答SecretKeyFactoryは、を使用して任意の長さのパスワードに基づいてキーを生成する方法を示しています。

2番目の問題についてcos.flush()は、最後のブロックを埋めて暗号化するのに十分ではありません。あなたはそれを求める必要がありますcos.close()これは、このclose()事実を述べているメソッドのドキュメントです。

于 2012-04-26T21:23:35.963 に答える
2

暗号化ハッシュ (SHA-1 など) を使用して、任意の文字列を固定長のバイナリ値に変換できます。

これは、私が以前に書いた単純なファイル暗号化プログラムで行ったことです。deriveKey()次のメソッドを 参照してください: http://david.tribble.com/src/java/tribble/crypto/FileEncrypter.java

于 2012-04-26T23:25:33.130 に答える