【发布时间】:2020-05-27 02:28:19
【问题描述】:
如果我在终端中创建一个 SHA-256,我会得到一个漂亮的十六进制哈希:
echo -n ChillyWilly | sha256sum
4c74e3994a247dfc31a515721528c78bb6ec09ccdcfd894d09f4aa44131393a8 -
如果我尝试对 crypt(3) 函数做同样的事情,那么我会得到完全不同的东西:
const char* what = crypt("ChillyWilly", "$5$");
printf("%s\n", what);
$5$$fQITOGYPwBrwOSpjX1Uhx5Ock/J84zbrqmTtg/SlvMB
看起来像 Base64 但不是。
我的假设是,如果密钥和盐相等,那么我应该得到相同的结果。网络中的所有 SHA-256 哈希器都将从相同的键/盐组合生成相同的结果。
如何使用 crypt(3) 函数获得相同的十六进制哈希?我已经按照crypt manpage 上的说明设置了 $5$,这应该强制 crypt 函数进入 SHA-256 模式。
我知道这里有一些类似的问题,但它们似乎没有包含正确的答案。
谢谢!
【问题讨论】:
-
您希望
sha256生成与crypt相同的哈希值吗?为什么?它们是不同的算法。 -
crypt上的联机帮助页警告很有趣。 “使用大规模并行计算机可以对这个关键空间进行详尽的搜索。”。这些天我们称之为 iGPU,并认为它们不适合严肃的游戏:D。我们搬到sha256是有原因的。 -
是的,我确实期待同样的结果。这就是 5 美元的用途。这应该强制 crypt 函数生成一个 SHA256 哈希。假设密钥和盐是相同的,我应该得到相同的结果。
-
@ellont 啊,我现在明白了。是的,现在这对我来说很有意义。