要求是使用erlang获取给定密码的基于SHA-512的哈希字符串。但是,API crypto:hash()
返回一些二进制数据。还可以在此API中提供盐值吗?
32> crypto:hash(sha512,"password").
<<215,224,160,147,228,234,208,93,217,94,133,49,214,115,67,
187,112,144,78,139,206,144,117,67,50,80,2,113,78,...>>
答案 0 :(得分:2)
不太可能,因为salt不是安全哈希的输入参数。安全散列(例如SHA-512)只有一个输入:二进制消息(同样,输出静态大小的二进制值也是如此)。
但是SHA-512可以用作创建其他算法的原语。例如,您可以从中构建密钥派生功能。如果将KDF用作密码,那么我们将讨论基于密码的KDF,或更常见的是密码哈希。现在,密码哈希确实包含盐作为输入参数。
一个这样的PBKDF是使用HMAC的PBKDF2,后者又可以使用SHA-512(或任何哈希算法,默认为SHA-1)。它在名为PKCS#5的基于密码的加密(PBE)标准中定义。
最后,有一些密码哈希文档定义了如何包含算法类型,盐,工作因子/迭代和密码哈希into a single string for easy verification。这些通常是由需要时有人定义的。它们并没有真正标准化。
答案 1 :(得分:2)
如果您需要打印出调用函数#:~:text=[prefix-,]textStart[,textEnd][,-suffix]
的结果以提高可读性-您可以尝试转换结果,例如:
crypto:hash(sha512,"password").
关于1> Secret = crypto:hash(sha512, "password").
<<177,9,243,187,188,36,78,184,36,65,145,126,208,109,97,
139,144,8,221,9,179,190,253,27,94,7,57,76,112,...>>
2> <<SHA512:512/big-unsigned-integer>> = Secret.
<<177,9,243,187,188,36,78,184,36,65,145,126,208,109,97,
139,144,8,221,9,179,190,253,27,94,7,57,76,112,...>>
3> io_lib:format("~128.16.0b", [SHA512]).
"b109f3bbbc244eb82441917ed06d618b9008dd09b3befd1b5e07394c706a8bb980b1d7785e5976ec049b46df5f1326af5a2ea6d103fd07c95385ffab0cacbc86"
-看起来您需要最终实现此逻辑。例如:
盐将添加到字符串的开头或结尾,然后将其加密,客户端会将其发送到服务器,然后在服务器端尝试进行检查,但是在这种情况下,您需要事先知道盐。