2012-03-01 126 views

回答

4

可以从前端应用程序获取密码的Hmac SHA256 hex DigestMD5 Digest,使用erlang方法创建一个哈希,然后存储该哈希。

例如,如果我有一个Web应用程序,我向用户索要密码,在创建帐户时或在登录时,我使用javaScript创建此密码的MD5摘要,并沿着线路(HTTPS)发送它,而不是实际密码。在到达Erlang时,我从JavaScript创建了这个MD5摘要的散列并将其存储为用户密码。所以,每次用户尝试登录我的页面时,我都会执行类似的过程,然后将其条目的散列输出与存储的条目进行比较。了解更多关于SHA256 HMac Digest通过看解决这个问题:HMAC SHA256 hex digest of a string in Erlang, how?,这一个:Erlang and JavaScript MD5 Digest match

+0

因此:我使用前端(例如javascript)执行sha/md5,然后使用erlang:phash2/1,2获取接收值的散列值。对? – user601836 2012-03-05 10:18:27

+0

是的。实际的密码永远不会通过导线传输,而是摘要。现在我们创建一个摘要哈希并存储哈希。从创建帐户开始,必须完成此操作。因此,无论何时前端出现密码字段,JavaScript都会创建密码的SHA1或MD5摘要并发送该密码,以便Erlang创建一个哈希并将其与所存储的哈希进行比较(用于登录)或将其另存为用户密码(用于帐户创建) – 2012-03-06 04:56:43

1

实际上,你在mnesia中存储元组(或记录,它们是相同的),但是在那些记录的字段中可以存储任何术语(包括二进制文件)。将它们转换为字符串并不是必需的。

5

使用加密:sha/1来散列密码是危险的。至少有一个盐,但最好用scrypt,bcrypt或pbkdf2来存储这样的密码。他们很容易受到多次攻击。不幸的是,我知道没有Erlang支持这些:/