在erlang中获取SHA-512哈希字符串

时间:2020-06-03 14:25:12

标签: cryptography erlang

要求是使用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,...>>

2 个答案:

答案 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" -看起来您需要最终实现此逻辑。例如: 盐将添加到字符串的开头或结尾,然后将其加密,客户端会将其发送到服务器,然后在服务器端尝试进行检查,但是在这种情况下,您需要事先知道盐。

相关问题