【问题标题】:Hashing passwords in Node.js the same way as in Drupal 7在 Node.js 中散列密码的方式与在 Drupal 7 中相同
【发布时间】:2017-05-02 13:32:29
【问题描述】:
我正在尝试将用户从 Drupal 7 迁移到 node.js 上的另一个项目。
而且我需要保留所有密码的现有密码。这意味着我需要像 Drupal 一样对密码进行哈希处理。
Drupal 默认使用带有盐的 SHA512。他们通过 PHP 的哈希函数多次运行哈希,以增加生成密码最终哈希的计算成本(一种称为 stretching 的安全技术)。
问题是,user_hash_password() 进行哈希处理,似乎很习惯。我真的不想对其进行逆向工程并重新发明轮子。
问题是,node.js 上有没有库可以做到这一点?
【问题讨论】:
标签:
node.js
drupal
hash
passwords
sha512
【解决方案1】:
可以通过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