我正在尝试将在Django应用程序中创建的一些用户迁移到Node.js应用程序。在Django应用程序中创建的用户使用BCryptSHA256PasswordHasher hasher对其进行了短语散列,并将这些短语存储在PostgreSQL数据库中。我可以从Postgres获取整个密码字符串,其中存储的格式为:
<algorithm>$<iterations>$<salt>$<hash>.
我想要做的是弄清楚如何获取已知密码(比如Password1),并使用Postgres中字段中的salt,获取Node.js哈希字符串以匹配Django字符串。通过这种方式,我可以验证已迁移的用户。
我已经多次尝试使用bcrypt和bcryptjs npm为Node.js,但到目前为止我没有运气。
使用任何Node.js npm的工作示例都很棒。
答案 0 :(得分:1)
var crypto = require('crypto'),
bcrypt = require("bcrypt");
exports.auth = function (password) {
var preHash = crypto.createHash('sha256').update(password).digest('hex');
var hash = bcrypt.hashSync(preHash, salt);
return hash;
}
其中salt参数应为:
$2a$12$imuoSFEBx8JJh5L9cCDJKO
我唯一不清楚的是盐字符串'$ 2a $'的第一部分。在我的Django密码字段中,这实际上是'$ 2b $',根据bcrypt page on Wikipedia是有效的,但是当尝试在传递给bcrypt(和bcryptjs)的盐中使用$ 2b $时会抛出错误。我可以解决这个问题,但也许bcrypt只需要更新。