你传递的密码是一个数字?
的 如果是这样: 强>
将其转换为String。
如果您不想这样做,可以传递一个Buffer对象:
使用类Method传递Buffer对象 Buffer.from(string[, encoding]) https://nodejs.org/api/buffer.html#buffer_class_method_buffer_from_string_encoding
Buffer.from(string[, encoding])
crypto.pbkdf2(Buffer.from(password, 'utf8'), salt, iterations, len, digest, function(err, derivedKey) { if (err) return fn(err); else fn(null, salt, derivedKey.toString('base64')); });
的 希望能帮助到你! 强>
var crypto = require('crypto'); function computeHash(password, salt, fn) { // Bytesize. The larger the numbers, the better the security, but the longer it will take to complete var len = 512; var iterations = 4096; var digest = 'sha512'; if (3 == arguments.length) { crypto.pbkdf2(Buffer.from(password, 'utf8'), salt, iterations, len, digest, function(err, derivedKey) { if (err) return fn(err); else fn(null, salt, derivedKey.toString('base64')); }); } else { fn = salt; crypto.randomBytes(len, function(err, salt) { if (err) return fn(err); salt = salt.toString('base64'); computeHash(password, salt, fn); }); } } module.exports.computeHash = computeHash;
错误“TypeError:密码短语必须是缓冲区”
确实建议尝试输入String的缓冲区转换
在你测试之前 Buffer.from(password, 'utf8')
Buffer.from(password, 'utf8')
你确认输入值是'utf8'编码, 而不是其他一些编码,如base64或latin1?
Node.js支持的编码列表