【问题标题】:byte[] to String and String to byte[]byte[] 到 String 和 String 到 byte[]
【发布时间】:2013-04-04 16:50:46
【问题描述】:

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

【问题讨论】:

  • 我不明白。 String encrypted = new String(cipherData, "UTF-8") 行不会对 cipherData = cipher.doFinal(cipherData) 行产生任何影响。
  • 你是绝对正确的。改变了它。但错误仍然存​​在。我也用 StringBuffer 试过。它也不起作用。
  • 您是否尝试过明确指定字符集:encrypted.getBytes("UTF-8")

标签: java arrays string casting byte


【解决方案1】:

这就是问题所在:

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 :)

【讨论】:

  • 为什么要使用 iHarder 而不是 Convert 类的内置支持?
  • 如果我想使用这样的库,我必须看看 Android Base64 库。该库是否也支持解密?
  • 谢谢。我将检查 Android 上 Base64 的 API。
  • @MrMoDoJoJr:你在考虑.NET 中的 System.Convert 吗?这是 Java。
【解决方案2】:

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

String encrypted = Base64.encodeToString(cipherData, Base64.DEFAULT);
cipherData = cipher.doFinal(Base64.decode(encrypted, Base64.DEFAULT));

【讨论】:

    猜你喜欢
    • 2013-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-14
    • 1970-01-01
    • 2012-10-07
    相关资源
    最近更新 更多