あなたは与えられたメッセージのために予測できないIVを持っている必要があります答えを見つけました。 IVをハードコーディングすると、予測可能になります。ですから、暗号文をIVに渡すために何らかの方法を工夫する必要があります。 IVとは異なり、IVは秘密にする必要はありません。
ブロック暗号は、固定サイズの平文ブロックで動作します。入力するのに十分な平文がない場合は、受信者がパディングとデータを区別できるようにパディングする必要があります。リンクされた例はこれを完全に無視し、それはエラーです。 CipherOutputStream
が使用されている場合、部分的な最終ブロックは暗号文からサイレントに切り捨てられます。 Cipher
オブジェクトが直接使用される場合、部分ブロックはdoFinal
メソッドで例外を発生させます。代わりに、PKCS5Paddingのようなものを使用してください。 JSPが暗号化される平文を受信している
SecretKey secret = new SecretKeySpec(key, "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, secret);
AlgorithmParameters param = cipher.getParameters();
/* In addition to ciphertext in "cos", recipient needs IV. */
byte[] iv = param.getParameterSpec(IvParameterSpec.class).getIV();
CipherOutputStream cos = new CipherOutputStream(output, cipher);
byte[] buf = new byte[2048];
while (true) {
int n = input.read(buf, 0, buf.length);
if (n < 0)
break;
cos.write(buf, 0, n);
}
cos.flush();
:
適切なJavaの例では、このようなものでしょうか? JSPで出力をフォーマットするにはどうすればよいですか?
これを私のjspコードで使うことができますか? –