byte []到String和String到byte []

时间:2013-04-04 16:50:46

标签: java arrays string casting byte

我有一个小问题,要将类型从byte[]更改为String,然后从String更改为byte[]。当我使用我的代码时,它返回RSA错误“rsa块的数据太多”。但是,当我使用原始byte[]时,它可以正常工作。

这是它的工作原理:

cipherData = cipher.doFinal(cipherData);

我尝试更改数据类型:

// Byte[] to String
String encrypted = new String(cipherData, "UTF-8");
// RSA Operation
cipherData = cipher.doFinal(encrypted.getBytes());

2 个答案:

答案 0 :(得分:7)

这是问题所在:

String encrypted = new String(cipherData, "UTF-8");

您的cipherData 不是 UTF-8编码的文字。这是任意的二进制数据。所以不要试图将它解释为 UTF-8文本。

相反,使用hex或base64 - 其中base64可能是最简单的方法。我喜欢public domain iHarder base64 library

String encrypted = Base64.encodeBytes(cipherData);
...

cipherData = Base64.decode(encrypted);

编辑:如果您当然使用的是Android,请使用built-in library:)

答案 1 :(得分:0)

我的工作完美。这是Android Base64库的代码:

String encrypted = Base64.encodeToString(cipherData, Base64.DEFAULT);
cipherData = cipher.doFinal(Base64.decode(encrypted, Base64.DEFAULT));