密码哈希应用程序中的字符

时间:2013-08-14 15:29:53

标签: algorithm unix hash passwords sha256

感谢您的时间。

我想要了解一些事情。为什么我手动生成的哈希值似乎只包含字母数字字符0-9,a-f,但我们最喜欢的应用程序使用的所有哈希值似乎都包含所有字母[和大写字母]?

示例:

使用sha256的手动哈希:

# sha256sum <<< asdf
d1bc8d3ba4afc7e109612cb73acbdddac052c93025aa1f82942edabb7deb82a1  -

你永远不会看到f以上的任何字母。没有什么是资本化的。

但是如果我使用htpasswd创建一个SHA哈希,它就有了所有的字母数字:

# htpasswd -snb test asdf
test:{SHA}PaVBVZkYqAjCQCu6UBL2xgsnZhw=

例如,如果您查看网站CMS数据库中的密码哈希,则会发生同样的情况。必须有一些额外的步骤我缺少或结束格式不同于实际的哈希格式。我认为它可能是base64编码或其他东西,但它似乎没有解码。

有人可以解释一下幕后发生的事情吗?我的朋友解释说管道“asdf”到sha256sum显示校验和,这不是实际的哈希本身。那是对的吗?如果是这样,我怎么能看到实际的哈希?

非常感谢先进!

2 个答案:

答案 0 :(得分:1)

这里有两件事情。

首先,您的手动哈希使用的算法与htpasswd不同。 -s标志导致htpasswd使用SHA1,而不是SHA256。使用sha1sum代替sha256sum

其次,哈希的编码是不同的。您的手动哈希是十六进制编码的,htpasswd哈希是Base64编码的。 htpasswd哈希解码,它只是解码为二进制。如果您尝试打印此二进制文件,它将看起来像=¥AU™¨Â@+ºPöÆ'f(取决于您正在使用的字符编码),这可能就是您认为它不能解码的原因。

如果您将Base64直接转换为Hex(您可以使用this one等在线工具),您会发现sha1sum会生成相同的哈希值。

  

我的朋友解释说,将shad6sum的“asdf”管道显示校验和,这不是实际的哈希值。

你的朋友不对。您正在看到哈希的十六进制编码。但是管道确实会影响生成的哈希值,它会添加一个换行符,所以实际哈希的是asdf\n。请改用此命令:

echo -n "asdf" | sha1sum

答案 1 :(得分:0)

它是base64编码的。

Base64 encoding ends an an equal sign。这是第一个指标。虽然htpasswd man page没有提到它,但other Apache docs about "the password encryption formats generated and understood by Apache"确实说Apache理解的SHA格式是base64编码的。