使用Node.js应用程序中的BCryptSHA256PasswordHasher在Django中验证密码哈希值

时间:2015-09-23 12:22:54

标签: django node.js django-authentication bcrypt sha256

我正在尝试将在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的工作示例都很棒。

1 个答案:

答案 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只需要更新。