Jav*_*oid 0 java arrays string byte casting
我有一个小问题,从更改类型byte[]来String,然后从String到byte[].当我使用我的代码时,它返回RSA错误"rsa块的数据太多".但是当我使用原版时byte[],它工作正常.
这是它的工作原理:
cipherData = cipher.doFinal(cipherData);
Run Code Online (Sandbox Code Playgroud)
我试图更改数据类型:
// Byte[] to String
String encrypted = new String(cipherData, "UTF-8");
// RSA Operation
cipherData = cipher.doFinal(encrypted.getBytes());
Run Code Online (Sandbox Code Playgroud)
这就是问题:
String encrypted = new String(cipherData, "UTF-8");
Run Code Online (Sandbox Code Playgroud)
您cipherData 不是 UTF-8编码的文本.这是任意的二进制数据.所以,不要试图解释它,就好像它是 UTF-8文本.
相反,使用hex或base64 - 其中base64可能是最简单的方法.我喜欢公共领域的iHarder base64库:
String encrypted = Base64.encodeBytes(cipherData);
...
cipherData = Base64.decode(encrypted);
Run Code Online (Sandbox Code Playgroud)
编辑:如果您当然使用Android,那么使用内置库 :)