2

我在 Java 中使用“SHA-512”算法用盐创建哈​​希。问题出在散列字符串中,总是有一个奇怪的字符会中断行,当我打印散列字符串时,它由两行组成。但是当我使用 SHA-256 时,它会更短,并且没有换行符。

那么为什么我在使用 SHA-512 时得到两条线?

编辑:对不起,我没有提到新行字符在编码字符串中。所以我的散列字符串就像 ".....hvRfXJwYDrnky/uUVzXnxz* \r\n *GFDJ+L3A......" 字符 "\r\n" 导致问题..

4

2 回答 2

2

问题是在散列字符串中总是有一个奇怪的字符

表明您正在尝试将哈希(这是二进制数据)转换为字符串,就好像它已经是编码文本一样,例如

// This is bad!
String text = new String(hashBytes);

哈希不是编码文本 - 它只是原始二进制数据。要将其表示为字符串,您应该使用 hex 或 base64 之类的东西。对于 base64 转换,您可以使用类似这个 public domain library的东西。例如:

// This won't lose data - it's reversible...
String base64 = Base64.encodeBytes(hashBytes);

当然,如果这不是您的代码所做的,那么这个答案是无用的 - 但在这种情况下,请将您的代码发布到您的问题中。

于 2012-08-02T16:22:58.513 回答
2

啊,那您需要将 Base64 行长度设置为更长的值。Base64 编码器通常有一个最大行长度,之后它们会添加换行符。

sun.misc.BASE64Encoder是一种丑陋的编码器。我认为您可以将其子类化并覆盖bytesPerLine. 我会使用org.apache.commons.codec.binary.Base64,您可以在构造函数中指定行长。

于 2012-08-02T19:09:49.887 回答