我有一个小问题,将类型从 byte[]
更改为 String
,然后从 String
更改为 byte[]
。当我使用我的代码时,它返回 RSA 错误“RSA block 数据过多”。但是当我使用原来的byte[]
时,它工作得很好。
它是这样工作的:
cipherData = cipher.doFinal(cipherData);
我尝试更改数据类型:
// Byte[] to String
String encrypted = new String(cipherData, "UTF-8");
// RSA Operation
cipherData = cipher.doFinal(encrypted.getBytes());
最佳答案
这就是问题:
String encrypted = new String(cipherData, "UTF-8");
您的cipherData
不是 UTF-8 编码文本。它是任意二进制数据。因此,不要尝试将其解释为 UTF-8 文本。
相反,使用十六进制或 base64 - 其中 base64 可能是最简单的方法。我喜欢public domain iHarder base64 library :
String encrypted = Base64.encodeBytes(cipherData);
...
cipherData = Base64.decode(encrypted);
编辑:如果您当然使用 Android,则使用 built-in library :)
关于java - byte[] 到 String 和 String 到 byte[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15817124/