我有一个小问题,要将类型从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());
答案 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));