NodeJS 停留在 cryto.pbkdf2Sync 函数
NodeJS stuck at cryto.pbkdf2Sync function
所以我在 MEAN Stack 应用程序中使用随机盐字符串和密码字符串生成密码哈希。该程序成功生成了随机盐并将其打印在控制台上。但是,它卡在了pbkdf2Sync函数,无法继续。
这是我的代码:
const crypto = require('crypto');
UserSchema.methods.setPassword = function(password){
console.log('start');
this.salt = crypto.randomBytes(16).toString('hex');
console.log(this.salt);
this.hash = crypto.pbkdf2Sync(new Buffer.alloc(password), new Buffer.alloc(this.salt), 1000, 64, 'sha512').toString('hex');
console.log(this.hash);
};
输出结果为:
start
ac09ae82b1fbb5b01257b5fa72bfc8614
然后程序就卡在这里了。
据我所知,该功能并未弃用。我该如何进行
const crypto = require('crypto');
const hash = (password) => {
console.log('start');
const salt = crypto.randomBytes(16).toString('hex');
console.log(salt);
const hash = crypto
.pbkdf2Sync(
new Buffer.alloc(password.length),
new Buffer.alloc(salt.length),
1000,
64,
'sha512'
)
.toString('hex');
console.log(hash);
};
hash('hello world');
这对我有用,本质上 alloc
是在寻找字节数(在内存中分配的大小),字符串在这里不起作用。
如果您希望使用 password
和 salt
作为填充缓冲区(带有值),则使用第二个参数 (fill
),在密码的情况下: new Buffer.alloc(password.length, password)
.
相反,使用 .length
到 return 字节数(字符串大小),这生成了 "correct" 输出:
start
55387a56bd8ff87ac05be698d938ef04
ab3d65e9e6341a924c752a77b8dc6b78f1e6db5d31df7dd0cc534039dd9662a97bcaf0b959fe78248a49859c7952ddb25d66840f052b27ef1ab60b9446c0c9fd
参考:https://nodejs.org/api/buffer.html#buffer_class_method_buffer_alloc_size_fill_encoding
所以我在 MEAN Stack 应用程序中使用随机盐字符串和密码字符串生成密码哈希。该程序成功生成了随机盐并将其打印在控制台上。但是,它卡在了pbkdf2Sync函数,无法继续。
这是我的代码:
const crypto = require('crypto');
UserSchema.methods.setPassword = function(password){
console.log('start');
this.salt = crypto.randomBytes(16).toString('hex');
console.log(this.salt);
this.hash = crypto.pbkdf2Sync(new Buffer.alloc(password), new Buffer.alloc(this.salt), 1000, 64, 'sha512').toString('hex');
console.log(this.hash);
};
输出结果为:
start
ac09ae82b1fbb5b01257b5fa72bfc8614
然后程序就卡在这里了。
据我所知,该功能并未弃用。我该如何进行
const crypto = require('crypto');
const hash = (password) => {
console.log('start');
const salt = crypto.randomBytes(16).toString('hex');
console.log(salt);
const hash = crypto
.pbkdf2Sync(
new Buffer.alloc(password.length),
new Buffer.alloc(salt.length),
1000,
64,
'sha512'
)
.toString('hex');
console.log(hash);
};
hash('hello world');
这对我有用,本质上 alloc
是在寻找字节数(在内存中分配的大小),字符串在这里不起作用。
如果您希望使用 password
和 salt
作为填充缓冲区(带有值),则使用第二个参数 (fill
),在密码的情况下: new Buffer.alloc(password.length, password)
.
相反,使用 .length
到 return 字节数(字符串大小),这生成了 "correct" 输出:
start
55387a56bd8ff87ac05be698d938ef04
ab3d65e9e6341a924c752a77b8dc6b78f1e6db5d31df7dd0cc534039dd9662a97bcaf0b959fe78248a49859c7952ddb25d66840f052b27ef1ab60b9446c0c9fd
参考:https://nodejs.org/api/buffer.html#buffer_class_method_buffer_alloc_size_fill_encoding