我想在数据库中存储散列密码(使用BCrypt).什么是好的类型,哪个是正确的长度?密码是否与BCrypt长度相同?
编辑
示例哈希:
$2a$10$KssILxWNR6k62B7yiX0GAe2Q7wwHlrzhF3LqtVvpyvHZf0MwvNfVu
在对一些密码进行哈希处理之后,似乎BCrypt总是生成60个字符的哈希值.
编辑2
很抱歉没有提及实施.我正在使用jBCrypt.
仅使用内置crypto模块在 Node.js 中实现密码哈希和验证的最佳方法是什么?基本上需要什么:
function passwordHash(password) {} // => passwordHash
function passwordVerify(password, passwordHash) {} // => boolean
Run Code Online (Sandbox Code Playgroud)
人们通常使用bcrypt或其他第三方库来实现此目的。我想知道内置crypto模块是否足够大,至少可以满足所有基本需求?
今天早些时候我用这个答案回答了一个问题.在我发布的示例中,我在bcrypt节点模块中使用了同步版本的调用.我选择使用同步版本的调用主要是因为我认为它使响应看起来更清晰,但我也不认为它会影响性能,因为bcrypt是cpu和内存密集而不是I/O绑定.我的理解是,节点几乎所有代码都运行在像浏览器这样的单个线程上,并且只使用后台线程来处理I/O和数据库访问.这让我相信cpu密集型任务仍将基本上"阻塞"服务器,因为没有其他线程可以将工作卸载到.
对我的回答的评论表明我的假设是错误的,经过一些研究后,我意识到我并没有真正掌握node.js如何处理这类事情.node.js中的异步编程是否会加速cpu和内存密集型调用?如果是这样,它是如何做到的?
我有一个非常简单的实用程序脚本,我用JavaScript编写了node.js,它读取文件,进行一些计算,然后编写输出文件.当前形式的源代码如下所示:
fs.readFile(inputPath, function (err, data) {
if (err) throw err;
// do something with the data
fs.writeFile(outputPath, output, function (err) {
if (err) throw err;
console.log("File successfully written.");
});
});
Run Code Online (Sandbox Code Playgroud)
这工作正常,但我想知道在这种情况下是否有任何缺点使用这些函数的同步变化,如下所示:
var data = fs.readFileSync(inputPath);
// do something with the data
fs.writeFileSync(outputPath, output);
console.log("File successfully written.");
Run Code Online (Sandbox Code Playgroud)
对我来说,这比回调品种更容易阅读和理解.在这种情况下,有没有理由使用前一种方法?
我意识到速度对于我在本地运行的这个简单脚本来说根本不是问题,但我有兴趣理解它背后的理论.什么时候使用异步方法有帮助,什么时候不帮助?即使在生产应用程序中,如果我只是在读取文件,然后等待执行下一个任务,是否有任何理由使用异步方法?
javascript ×3
node.js ×3
asynchronous ×1
bcrypt ×1
cryptography ×1
hash ×1
mysql ×1
reactor ×1
scrypt ×1
storage ×1
types ×1