签名变更

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

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

要么

 String my_string = my_array.toString(); 

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

我的意思是例如my_string在我执行my_string.getBytes().toString()或my_array之后发生更改(new String(my_array)).getBytes()

谢谢。

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

你在这做错了两件事:

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

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

 byte[] signature = ...; String signatureBase64 = Base64.encode(signature); // Propagate signatureBase64 to the other side, then... byte[] signature = Base64.decode(signatureBase64); 

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

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

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