我目前的项目是我在 Node.js 中的第一个项目(如果重要的话,也使用 MongoDB、Mongoose 和 Express),并且很容易分心,我在决定如何处理用户身份验证时掉进了加密的兔子洞。(此项目不需要其他加密)。
遵循此页面上的模式(模式,而不是代码 - 我在安装 node.bcrypt 时遇到问题,但在安装 node-sodium 时遇到问题)以及此页面上我的流程是
新用户通过 https 提交密码
模式生成盐
架构散列密码和盐的串联
架构存储盐和密码以及用户信息
现在我不知道这是否是我个人的缺陷,但我在遵循libsodium 文档时遇到了麻烦。node-sodium不提供任何额外的散列信息(尽管它确实有一个加密示例)。
这是我想用来生成哈希的代码:
let buf = new Buffer(sodium.crypto_pwhash_STRBYTES);
sodium.randombytes_buf(buf, sodium.crypto_pwhash_STRBYTES);
let salt = buf.toString();
let preBuffer = "somePass" + salt;
let passwordBuf = Buffer.from(preBuffer);
let hash = sodium.crypto_pwhash_str(passwordBuf, sodium.crypto_pwhash_OPSLIMIT_INTERACTIVE, sodium.crypto_pwhash_MEMLIMIT_INTERACTIVE);
所以问题是两个部分。这是一个好的过程,代码是否合适?