我需要 Node 标准库中的 Crypto 模块。我有这个处理注册表单的 POST 路由:
app.post('/superadmin/add-account', function(req, res) {
// Shorthand variable
var doc = req.body;
crypto.randomBytes(32, function(err, buf) {
if (err) throw err;
// Sanitise and transform user input
...
// Validate user input
...
var errors = validator.getErrors();
// Generate new object data
doc.salt = buf;
doc.pass = doc.salt + 'justForNow';
console.log(doc);
当我现在输出文档(req.body)时,我得到了一些对我来说似乎很奇怪的值......在控制台中输出的 buf 主要由类似于内部带有问号的框的字符组成。这个对吗?但是当我将 buf 保存到 doc.salt 并输出这个时,我得到了一些完全不同的东西......“Slowbuffer ae be C5 A3 E3 .... 等等”
Q1:在我将它与字符串连接或保存之前,我是否必须对 crypto.randomBytes() 生成的盐做一些特别的事情(将其解析成什么?)?
Q2: crypto.randomBytes() 函数存在于异步和同步版本中。我使用的是异步版本,但我真的不知道为什么?=PI 认为异步 callbaks 主要用于处理可能需要时间的 I/O 操作......或者我是否使用此函数的回调版本,因为它实际上是一个复杂的过程,可能需要一些时间并为 som MS 锁定系统如果我使用同步版本?
Q3:我还没有到那里,但我将继续使用 The Crypto 模块的哈希函数对 salt + 密码进行哈希处理并将其保存到 DB 中。我知道我必须创建一个这样的变量:
var sha256 = crypto.createHash('sha256');
但我不明白我现在如何使用它。