0

我有一个小问题要将类型从byte[]to更改StringStringto 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());
4

2 回答 2

7

这就是问题:

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

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

相反,使用 hex 或 base64 - 其中 base64 可能是最简单的方法。我喜欢公共领域的 iHarder base64 库

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

cipherData = Base64.decode(encrypted);

编辑:当然,如果您使用的是 Android,那么请使用内置库:)

于 2013-04-04T16:58:09.677 回答
0

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

String encrypted = Base64.encodeToString(cipherData, Base64.DEFAULT);
cipherData = cipher.doFinal(Base64.decode(encrypted, Base64.DEFAULT));
于 2013-04-04T17:09:28.967 回答