暗号化が新しくなりました。復号化エラー:「必要なときにivを設定していません」
私はバイト配列を復号化しようとしていますが、IVを提供しているときに例外が発生しています: InvalidAlgorithmParameterException(予想通りにivが設定されていません)。ここで
は(IV nullでなく、暗号化する際に使用される値を持つ16バイトの配列である)私のコードです:
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, encriptionKey,new IvParameterSpec(iv));
私は暗号がOK初期化されるIVを指定しない場合:私は、私が使用していたバージョンに対応するが、私、私はそれがcorrec理解しておりません事になり、いくつかのコードを持っていないかもしれませんJCEStreamCipher(here)の実装を見つけた答えを見つけようとして
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, encriptionKey);
tly。
ここでは、コードです:
if ((ivLength != 0) && !(param instanceof ParametersWithIV))
{
SecureRandom ivRandom = random;
if (ivRandom == null)
{
ivRandom = new SecureRandom();
}
if ((opmode == Cipher.ENCRYPT_MODE) || (opmode == Cipher.WRAP_MODE))
{
byte[] iv = new byte[ivLength];
ivRandom.nextBytes(iv);
param = new ParametersWithIV(param, iv);
ivParam = (ParametersWithIV)param;
}
else
{
throw new InvalidAlgorithmParameterException("no IV set when one expected");
}
}
は、復号化の際、私はIVを提供することができないように見えるが、それは私にはあまり意味を成していませんが。
ご協力いただければ幸いです。
ありがとう、 richard
申し訳ありませんが、私は本当にあなたの問題を理解していません。 JCEStreamCipherのコードではなく、使用しているコード(2行以上)を投稿してください。 – Robert
あなたは「私は復号化するときにIVを提供できないように見えますが、なぜそうではありませんか?通常の方法は、IVを暗号文の先頭に付加して送信する方法です。受信者は最初の16バイトをIVとして残りのメッセージを復号化します。 – rossum
それは私がそれをやっている方法ですが、私は困惑していたdecrypterにIVを提供するときに例外があります。キーを作成するときにエラーが発生しました(ちょうど答えを投稿しました)。 – richardtz