【发布时间】:2015-05-13 17:44:05
【问题描述】:
我正在将现有的基于 php 的网站转换为 node.js 应用程序,我需要将这种加密方法从 php 复制到 js。
private static $_passwordSalt = 'd2g6IOP(U(&§)%U§VUIPU(HN%V/§§URerjh0ürfqw4zoöqe54gß0äQ"LOU$3wer';
public static function getCryptedPassword($password = 'password') {
return sha1(md5(self::$_passwordSalt.$password));
}
到目前为止,我已经尝试过了,但它没有返回相同的结果:
UserSchema.methods.hashPassword = function(password) {
var salt = 'd2g6IOP(U(&§)%U§VUIPU(HN%V/§§URerjh0ürfqw4zoöqe54gß0äQ"LOU$3wer'
var md5Hash = md5(password + salt);
var hash = sha1(md5Hash);
return hash;
};
【问题讨论】:
-
首先,您在 PHP 中使用
md5(salt, password),在 JavaScript 中使用md5(password, salt)。 -
我尝试了所有不同的组合:md5(salt,password),md5(password,salt),sh1(md5,salt),sha1(salt,md5),但还是不行跨度>
-
您不应该使用 md5 或 sha1 或两者的任何组合来存储密码。在 PHP 中,存储密码的最佳方式是 password_hash(),它(当前)使用 bcryt。这是 bcrypt 的 node.js 实现:github.com/shaneGirish/bcrypt-nodejs
-
您知道这是一种非常不安全的密码处理方式吗?静态盐实际上不是盐,而且 MD5 对密码进行哈希处理的速度太快了,你可以暴力破解8 Giga MD5/s。您应该使用带有成本因子的慢速散列函数,请参阅password_hash() 函数。
标签: php node.js md5 salt password-encryption