java - byte[] 到 String 和 String 到 byte[]

标签 java arrays string casting byte

我有一个小问题,将类型从 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/

相关文章:

C# 在引号之间分割字符串

java - 混合 Kotlin 和 Java 代码

java - Spring ACL 是一个好的 ACL 实现吗?

javascript - jQuery-JS 使用循环从多维数组追加

javascript - 如何检查数组中除 0 javascript 之外的重复项

C 字符串 - char* 作为整数?

java - 检测 Java 字符串中的日语字符

java - 在测试期间调用预定方法

javascript - 为什么 for-of 循​​环对于小数组比标准 for 循环更快而对于更大数组更慢?

string - 如何在 Rust 中将字符串转换为向量?