javax.crypto.Cipher的问题。某些字符在dercypted字符串中被破坏

时间:2010-02-15 14:58:36

标签: java cryptography

当我对长字符串使用(加密/解密)javax.crypto.Cipher类时,输出字符串中的某些字符无效。

//ecnryption
 byte[] inputBytes = str.getBytes();
 cypheredBytes = cipher.doFinal(inputString, 0, inputBytes, outputBytes, 0);
 return new String(outputBytes, 0, cypheredBytes);

//decryption
 byte[] inputBytes = str.getBytes();
 cypheredBytes = cipher.doFinal (inputBytes, 0, inputBytes.length, outputBytes, 0);
 return new String(outputBytes, 0, cypheredBytes);

2 个答案:

答案 0 :(得分:1)

axtavt是正确的。问题是您无法将任意字节数组(cypheredBytes)转换为String。如果你真的需要它作为一个字符串(比如,通过线路发送),那么你需要把它变成像hex或Base 64这样的东西。你会在Commons Codecs中找到每个编解码器。

答案 1 :(得分:0)

我猜这是字符编码的问题。

以下转变可能不可逆:

String str = String(outputBytes, 0, cypheredBytes); 
byte[] inputBytes = str.getBytes(); 

将加密邮件保留为byte[],而不是String

此外,以下行依赖于系统默认编码:

byte[] inputBytes = str.getBytes();         
...
return new String(outputBytes, 0, cypheredBytes);

考虑显式编码规范:

byte[] inputBytes = str.getBytes("UTF-8");         
...
return new String(outputBytes, 0, cypheredBytes, "UTF-8");