我正在寻找使用node.js和mongodb安全存储密码和其他敏感数据的示例。
我希望所有内容都使用唯一的盐来与哈希值一起存储在mongo文档中。
对于身份验证,我只需要对输入进行盐值处理和加密,然后将其与存储的哈希值匹配吗?
我是否需要解密这些数据,如果需要,应该如何解密?
私钥或者盐值处理方法是如何安全地存储在服务器上的?
我听说AES和Blowfish都是不错的选择,我应该使用哪一个?
任何关于设计这个功能的示例将非常有帮助!
谢谢!
我正在寻找使用node.js和mongodb安全存储密码和其他敏感数据的示例。
我希望所有内容都使用唯一的盐来与哈希值一起存储在mongo文档中。
对于身份验证,我只需要对输入进行盐值处理和加密,然后将其与存储的哈希值匹配吗?
我是否需要解密这些数据,如果需要,应该如何解密?
私钥或者盐值处理方法是如何安全地存储在服务器上的?
我听说AES和Blowfish都是不错的选择,我应该使用哪一个?
任何关于设计这个功能的示例将非常有帮助!
谢谢!
使用这个:https://github.com/ncb000gt/node.bcrypt.js/
bcrypt是少数专注于此用途的算法之一。您永远不应该能够解密密码,只能验证用户输入的明文密码是否与存储/加密哈希匹配。
bcrypt非常简单易用。以下是我的Mongoose用户模式代码片段(使用CoffeeScript)。请务必使用异步函数,因为bycrypt故意变慢。
class User extends SharedUser
defaults: _.extend {domainId: null}, SharedUser::defaults
#Irrelevant bits trimmed...
password: (cleartext, confirm, callback) ->
errorInfo = new errors.InvalidData()
if cleartext != confirm
errorInfo.message = 'please type the same password twice'
errorInfo.errors.confirmPassword = 'must match the password'
return callback errorInfo
message = min4 cleartext
if message
errorInfo.message = message
errorInfo.errors.password = message
return callback errorInfo
self = this
bcrypt.gen_salt 10, (error, salt)->
if error
errorInfo = new errors.InternalError error.message
return callback errorInfo
bcrypt.encrypt cleartext, salt, (error, hash)->
if error
errorInfo = new errors.InternalError error.message
return callback errorInfo
self.attributes.bcryptedPassword = hash
return callback()
verifyPassword: (cleartext, callback) ->
bcrypt.compare cleartext, @attributes.bcryptedPassword, (error, result)->
if error
return callback(new errors.InternalError(error.message))
callback null, result
同时阅读这篇文章,它应该会让你相信bcrypt是一个好选择,并帮助你避免“彻底地失败”。
这是我迄今为止遇到的最好的例子,使用node.bcrypt.js。http://devsmash.com/blog/password-authentication-with-mongoose-and-bcrypt