你需要有一個IV是不可預測對於給定的消息。對IV進行硬編碼使其具有可預測性。所以你需要設計一些方法將密文傳遞給IV。 IV不需要保密,但不像鑰匙。
分組密碼對固定大小的明文塊進行操作。如果您沒有足夠的明文輸入,則必須填充以便接收者可以區分填充和數據。鏈接的例子完全忽略了這一點,這是一個錯誤。如果使用CipherOutputStream
,則部分最終塊將從密文中靜默截斷。如果直接使用Cipher
對象,則部分塊將導致doFinal
方法引發異常。相反,使用類似PKCS5Padding的東西。
一個適當的Java的例子是這樣的:
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();
哪裏JSP接收明文進行加密?您希望JSP如何格式化其輸出(包括IV)?
我可以用我的jsp代碼:O? – 2013-06-22 08:38:51