【发布时间】:2015-08-17 18:19:11
【问题描述】:
我几乎没有密码保护方面的经验。我在大学里没有上过任何密码学课程,我的数学课程只是简单地涉及了实际的加密算法。不过现在,我想将用户密码存储在数据库中,以创建一种安全的方法来登录我的应用程序。看完this,总结了几点:
- 密码哈希应该花费大量时间,以防止重复登录尝试并提高安全性。
- 两个或多个密码可能散列到同一个字符串。
考虑到这一点,我尝试使用jssha 在我的节点服务器上实现密码散列。复制自述文件中的示例:
var jsSHA = require('jssha');
var sha = new jsSHA("SHA-512", "TEXT");
sha.update("password");
var hash = sha.getHash("HEX");
console.log(hash);
我可以为密码字符串创建散列,但这个模块似乎违反了上述两个要点。连续运行该脚本 5 次每次都会创建相同的字符串,甚至使用构造函数中的可选 hashmap 来添加迭代:
var sha = new jsSHA("SHA-512", "TEXT", '{"numRounds" : 4000000}');
散列在微秒内完成,无论我提供给构造函数的轮数是多少。
我真的找不到任何专门在 Javascript/Node 中进行散列的文档。我是在错误地使用模块,还是应该使用其他东西?
【问题讨论】:
-
第三个参数应该是对象字面量,而不是字符串。
-
您将在security.stackexchange.com 获得更好的答案。但是,我强烈建议不要使用 SHA-512,因为它在很大程度上被破坏为安全哈希。最先进的是 scrypt,尽管 HMAC-SHA1 也被认为是可接受的选择。
-
哦,真的……我会调查一下这个密码。
-
你看过bcrypt吗?看起来 jsSHA 没有任何盐的助手。
-
bcrypt 是 scrypt 的另一个不错的替代品。
标签: javascript node.js password-protection