我使用crypto:sha / 1来在我的erlang应用程序中哈希密码。
我应该将直接获得的二进制文件存储在mnesia中,还是应该将它们转换为十六进制字符串?
答案 0 :(得分:5)
使用crypto:sha / 1进行散列密码很危险。至少有一个盐,但最好使用scrypt,bcrypt或pbkdf2来存储这样的密码。它们可抵御多种攻击。不幸的是,我知道没有Erlang支持那些:/
答案 1 :(得分:5)
使用https://github.com/smarkets/erlang-bcrypt进行散列而不是SHA1或MD5。
答案 2 :(得分:4)
可以从前端应用程序获取Hmac SHA256 hex Digest
或MD5 Digest
密码,使用erlang方法创建哈希,然后存储此哈希。
例如,如果我有一个Web应用程序,我要求用户输入密码,在帐户创建或登录时,我使用javaScript创建此密码的MD5摘要并沿线传送(HTTPS)而不是实际的密码。在到达Erlang时,我从JavaScript创建这个MD5 Digest的哈希并将其存储为用户密码。因此,每次用户尝试登录我的页面时,我都会执行类似的过程,然后将其条目的哈希输出与存储的哈希输出进行比较。通过查看此问题的解决方案,了解SHA256 HMac Digest
的更多信息: HMAC SHA256 hex digest of a string in Erlang, how?以及此问题: Erlang and JavaScript MD5 Digest match
答案 3 :(得分:1)
实际上,您在mnesia中存储元组(或记录,它们是相同的),但在该记录的字段中,您可以存储任何术语(包括二进制文件)。将它们转换为字符串并不是必需的。