【发布时间】:2013-10-15 04:37:43
【问题描述】:
我需要 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:我还没到那里,但我将继续使用 Crypto 模块的散列函数对盐 + 密码进行散列并将其保存到数据库中。我知道我必须创建一个这样的变量:
var sha256 = crypto.createHash('sha256');
但我不明白我现在如何使用它。
【问题讨论】:
-
好的,我只是尝试在 buf 上使用
toString()。这似乎给了我一个对用户更友好的变量......但是如果crypto.randomBytes()不生成字符串?它生成什么样的数据类型?
标签: javascript node.js hash express passwords