我在 Java 中使用“SHA-512”算法用盐创建哈希。问题出在散列字符串中,总是有一个奇怪的字符会中断行,当我打印散列字符串时,它由两行组成。但是当我使用 SHA-256 时,它会更短,并且没有换行符。
那么为什么我在使用 SHA-512 时得到两条线?
编辑:对不起,我没有提到新行字符在编码字符串中。所以我的散列字符串就像 ".....hvRfXJwYDrnky/uUVzXnxz* \r\n *GFDJ+L3A......" 字符 "\r\n" 导致问题..
问题是在散列字符串中总是有一个奇怪的字符
这表明您正在尝试将哈希(这是二进制数据)转换为字符串,就好像它已经是编码文本一样,例如
// 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);
当然,如果这不是您的代码所做的,那么这个答案是无用的 - 但在这种情况下,请将您的代码发布到您的问题中。
啊,那您需要将 Base64 行长度设置为更长的值。Base64 编码器通常有一个最大行长度,之后它们会添加换行符。
sun.misc.BASE64Encoder
是一种丑陋的编码器。我认为您可以将其子类化并覆盖bytesPerLine
. 我会使用org.apache.commons.codec.binary.Base64
,您可以在构造函数中指定行长。