我想创建一个混合移动应用程序,后端是Node js,它将以mongodb保存数据。我的服务器工作正常,我准备了处理用户请求的路由。
我正在使用bcrypt在mongodb中存储密码哈希值。密码保存正确但我的问题是我无法检索真实密码,例如,当管理员将GET请求传递给节点js服务器以获取用户数据时,他在前端获得了哈希密码。
这是前端的结果:
这是存储密码哈希的代码:
UserSchema.pre('save', function (next) {
var user = this;
if (this.isModified('password') || this.isNew) {
bcrypt.genSalt(10, function (err, salt) {
if (err) {
return next(err);
}
bcrypt.hash(user.password, salt, function (err, hash) {
if (err) {
return next(err);
}
user.password = hash;
next();
});
});
} else {
return next();
}
});
请问如何检索真实密码?
答案 0 :(得分:5)
这就是散列的重点......'不可逆转地'使密码变形。如果它是一个普通的哈希,你应该能够使用rainbowtables或其他类型的方法来破解它。如果您使用'salt'来密码密码,我相信您破解密码的可能性会更小。
特别是使用河豚密码的bcrypt,是一种非常有效的哈希算法。
哈希密码已成为标准,因此网站所有者实际上无法访问普通密码。
还有一个后续问题:为什么?
答案 1 :(得分:4)
你做不到。这是密码散列的目的。
答案 2 :(得分:4)
你做不到。根据设计,散列函数,尤其是加密散列函数,是不可逆的,或one-way function。设计的加密哈希函数具有以下属性
这是保护密码存储的众多关键部分之一。例如,如果攻击者获得对您的服务器的访问权限,从而能够对您的数据库运行任意查询,则正确的加密哈希函数可确保攻击者无法检索您的用户密码。