2013-10-30 63 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只看它获得的字节数组,它不会修改它。

相关问题