签名变更

时间:2011-12-20 14:34:54

标签: java string bytearray

任何人都可以建议我如何将字节数组转换为字符串?此方法不起作用:

byte [] my_array=....;
String my_string = new String (my_array);

String my_string = my_array.toString();

我想要做的是将签名转换为字符串并将其传递给另一方。但是当我使用上面的方法和方法时,my_string.getBytes()签名会发生变化,然后无法验证。

我的意思是例如当my my_string.getBytes().toString()时my_string发生了变化 或my_array在(new String(my_array)).getBytes()

之后发生变化

感谢。

3 个答案:

答案 0 :(得分:4)

(你没有明确说明,但我假设你的字节数组是某种加密签名。)

你在这里犯了两件事:

  • 尝试直接从任意字节数组创建字符串:您的字节数组表示编码文本,所以不要这样对待。
  • 即使它 ,你也会使用平台默认编码,这几乎总是一个坏主意。

以可逆形式处理任意二进制数据作为文本的最常用方法是使用base64。有一个公共域base64 Java库here(还有很多其他免费选项):

byte[] signature = ...;
String signatureBase64 = Base64.encode(signature);

// Propagate signatureBase64 to the other side, then...

byte[] signature = Base64.decode(signatureBase64);

答案 1 :(得分:1)

new String()getBytes()隐式使用平台默认编码并重载以允许您指定编码(几乎总是应该完成)。显然,您的平台默认编码不能代表阵列中的所有字节值。

但是想要将字节转换为String并且返回几乎总是错误的做法。这个“签名”究竟包含什么,以及你认为必须将它转换为String的“另一面”是什么?

答案 2 :(得分:0)

您必须将字节数组编码为Base64.您还可以使用javax.xml.bind.DatatypeConverter的方法 - printBase64Binary()parseBase64Binary()来编码或解码Base64。