如何使用加密检查字符串是否已在 Node.js 中进行哈希处理
How to check if a string is already hashed in Node.js using crypto
我正在开发一个应用程序,允许用户更改密码。
我正在使用 Node.js 与 mongoose
和 crypto
.
为了为密码生成哈希,我已经挂接到了模型的pre('save')事件。所以基本上当你使用它时:
var user = new User({password: '123'});
user.save(); // the password will be encrypted automatically
由于能够更改密码,如果用户实际更改了密码或修改了任何其他字段,我需要找到一种方法。例:
var user = User.findById('1234567', function(error, user){
user.name = 'Hello';
user.save(); // this will hash the password again, although it is not necessary
})
我正在使用 Node.js 的名为 crypto
的模块为密码生成哈希:
crypto.pbkdf2(password, salt, 5000, 512, 'sha512', function(error, buffer){
this.mixins.callback.call(callback, [error, buffer.toString('base64')]);
}.bind(this));
有没有办法检查password
是否已经是散列的?
如果没有,我将再次生成哈希。
谢谢
这本质上是糟糕的方法。只需调用字段password_hash
并始终显式传递哈希。否则,您可能会在一些小的配置更改后意外开始存储未散列的密码。
此外,如果允许任意字符串作为密码,则通常无法区分哈希和未哈希字符串。
哈希字符串具有哈希算法标识符前缀。可以通过检查字符串是以 $2a$
开头还是以 $2b$
开头来验证
参考
相关文章:
- Node.JS处理重复的可传递依赖关系
- React.js处理第三方库安装
- 如何发布单选和复选框选择?表单由php和js处理
- 使用Backbone.js处理浏览器历史记录
- Ember.js处理View事件后转换到路由
- 节点.js:如何使用验证器.js处理多个验证
- 使用 Angular.js 处理基于 OAuth 令牌的身份验证
- 反应.js - 处理哑儿童状态的模式
- JS处理延迟后输入仅一次
- 使用 Handlebars.js 处理 executeSql 语句的结果
- Node JS - 处理多个查询(promise,bluebird)
- 节点.js处理异步
- 保存用caman.js处理过的图像
- kue node.js处理作业行为
- 如何使用angular js处理jsonarray响应?我得到了
- 什么'这是用express.js处理mongose连接的正确方法
- Node.js处理http请求的响应
- angular.js处理动态获取的数据
- 使用js处理iframe时出错
- Angular JS处理控制器事件