Node.js 中的散列密码与 Drupal 7 中的方式相同

Hashing passwords in Node.js the same way as in Drupal 7

我正在尝试将用户从 Drupal 7 迁移到 node.js 上的另一个项目。

而且我需要保留所有密码的现有密码。这意味着我需要像 Drupal 一样散列密码。

Drupal 默认使用带盐的 SHA512。他们 运行 通过 PHP 的散列函数多次计算散列,以增加生成密码最终散列的计算成本(一种称为 stretching 的安全技术)。

问题是,进行散列的 user_hash_password() 似乎很习惯。我真的不想对它进行逆向工程并重新发明轮子。

问题是,node.js 上是否有任何图书馆可以做到这一点?

可以用drupal-hash模块来完成。

检查现有密码

var drupalHash = require('drupal-hash');

var clearPassword = 'superpassword';
var passwordHash = '$S$DODRFsy.GX2iSkl2zJ4fsrGRt2S0FOWu0JSA3BqAmSayESbcY3w9';
var isValid = drupalHash.checkPassword(clearPassword, passwordHash);
// returns true or false 

散列新密码

var drupalHash = require('drupal-hash');

var newPassword = 'superpassword';
var passwordHash = drupalHash.hashPassword(newPassword);
// returns something like '$S$DODRFsy.GX2iSkl2zJ4fsrGRt2S0FOWu0JSA3BqAmSayESbcY3w9'

检查旧密码是否需要更新

var drupalHash = require('drupal-hash');

var passwordHash = '$P$DxTIL/YfZCdJtFYNh1Ef9ERbMBkuQ91';
var needsHash = drupalHash.needsNewHash(passwordHash);
// return true or false