Password Hashes Characters in Applications
谢谢你的时间。
我想了解一些事情。为什么我手工生成的散列看起来只包含字母数字字符0-9、a-f,但我们最喜欢的应用程序使用的所有散列似乎都包含所有字母[和大写字母]?
例子:
使用sha256手动散列:
1 2 | # sha256sum <<< asdf d1bc8d3ba4afc7e109612cb73acbdddac052c93025aa1f82942edabb7deb82a1 - |
你从来没有看到F.以上的字母,也没有大写的。
但是,如果我使用htpasswd创建一个sha散列,它将包含所有字母数字:
1 2 | # htpasswd -snb test asdf test:{SHA}PaVBVZkYqAjCQCu6UBL2xgsnZhw= |
例如,如果您查看网站cms数据库中的密码哈希,也会发生同样的事情。必须有一些额外的步骤丢失,或者结束格式与实际哈希格式不同。我以为它可能是base64编码的或者什么的,但它似乎没有解码。
有人能解释一下这里幕后发生了什么吗?我的朋友解释说,通过管道"asdf"到sha256sum显示的是校验和,而不是真正的哈希本身。对吗?如果是这样,我如何才能看到实际的散列值?
非常感谢你的进步!
这里有两件事。
首先,您的手动散列使用的是与
第二,散列的编码是不同的。您的手动散列是十六进制编码的,
如果您将base64直接转换为hex(您可以使用类似于此的在线工具),您会发现
My friend explained that piping"asdf" to sha256sum is showing the checksum, which is not the actual hash itself.
你的朋友不正确。您将看到哈希的十六进制编码。但是管道确实会影响生成的散列,它添加了一个换行字符,所以实际上散列的是
1 | echo -n"asdf" | sha1sum |
它是base64编码的。
base64编码以等号结尾。所以这是第一个指标。虽然htpasswd手册页没有提到它,但是其他关于"Apache生成和理解的密码加密格式"的Apache文档确实说Apache理解的sha格式是base64编码的。