2013-10-30 96 views
0

我有一個使用AES/CBC/PKCS5Padding的加密模式的Cipher aesEncryptCipherJava中Cipher.dofinal(byte [])的返回值是什麼意思?

爲什麼以下兩個函數返回兩個不同的東西? encrypt2的回報價值是什麼意思?根據javadoc,它應該返回「帶有結果的新緩衝區」,我認爲這意味着「加密字節」。

public byte[] encrypt(byte[] rawBytes) { 
    aesEncryptCipher.doFinal(rawBytes); 
    return rawBytes; 
} 

public byte[] encrypt2(byte[] rawBytes) { 
    return aesEncryptCipher.doFinal(rawBytes); 
} 

使用一些初始化向量和密鑰,

encrypt("xxx".getBytes("UTF-8")); 
returns [120, 120, 120] 

encrypt2("xxx".getBytes("UTF-8")); 
returns [-76, 22, 46, 63, -16, -29, 56, -85, -115, -77, 11, 16, -56, 95, 20, 29] 
+0

那麼,'Cipher.doFinal(byte [] bytes)'的返回值是什麼?從一眼看,它看起來像該方法不會原地修改'byte []'(這是預期的),所以你的第一個方法會返回輸入,而第二個方法會(大概)返回加密結果。 –

回答

2

第一個返回原始的未加密字節(輸入),而第二個返回的加密(輸出)的結果。

+0

我剛剛明白了。謝謝。 –

1

encrypt函數返回純文本,而encrypt2返回加密數據。

這是因爲doFinal只看它獲得的字節數組,它不會修改它。

相關問題