使用SHA-512算法创建新的行字符



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

那么,当我使用SHA-512时,为什么我会得到两条线呢?

编辑:对不起,我并没有提到换行符在编码字符串中。因此,我的哈希字符串类似于"..hvRfXJwYDrnky/uUVzXnxz*\r\n*GFDJ+L3A……"字符"\r\n"导致问题。。

Ah,那么您需要将Base64行的长度设置为更长的长度。Base64编码器通常具有最大行长度,之后添加换行符。

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

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

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

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

散列不是编码的文本,它只是原始二进制数据。要将其表示为字符串,您应该使用类似于十六进制或base64的东西。对于base64转换,您可以使用类似于这个公共域库的东西。例如:

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

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

最新更新