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

Cryptography 获取erlang中的SHA-512哈希字符串,cryptography,erlang,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

要求获取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,...>>

不太可能,因为salt不是安全哈希的输入参数。像SHA-512这样的安全散列只有一个输入:一个二进制消息,类似地,还有一个静态大小的二进制值作为输出

但是,SHA-512可以用作创建其他算法的原语。例如,您可以用它构建一个键派生函数。如果KDF用于密码,那么我们将讨论基于密码的KDF,或者更常见的密码散列。现在,密码散列确实包含一个salt作为输入参数

一个这样的PBKDF是PBKDF2,它使用HMAC,而HMAC又可以使用SHA-512或任何哈希算法,默认为SHA-1。它在基于密码的加密PBE标准中定义,称为


最后,还有一些密码散列文档,它们定义了如何包含算法类型、salt、工作系数/迭代次数和密码散列。这些通常只是在需要时由某人定义;它们本身并没有真正标准化。

如果需要打印调用函数加密的结果:hashsha512,password。为了便于阅读,您可以尝试转换结果,例如:

1> Secret=crypto:hashha512,密码。 2> =秘密。 3> io_库:格式~128.16.0b,[SHA512]。 B109F3BBBC244EB82441917ED06D618B9008DD09B3B5E07394C706A8BB980B1D7785E5976EC049B46DF5F1326AF5A2EA6D103FD07C95385FFAB0CACB86 关于盐-看起来你需要在你的最后实现这个逻辑。如:
salt将被添加到要加密的字符串的开头或结尾,客户端将把它发送到服务器,在服务器端,您将尝试检查它,但在这种情况下,您需要事先知道salt。

哈希函数的输出通常不是字符串,即可打印的ASCII字符。如果需要,请将其转换为base64。感谢您的回复。我的要求是从给定的密码字符串生成哈希。该要求类似于Python中的“cryp.crypt”函数。它可以在erlang中实现吗?erlang中的PBKDF2在internet搜索中有多个结果。当然这是可以做到的,Erlang毫无疑问是图灵完备的。