转换密码哈希算法

I coded up an app with a backend in PhP and got a few users. All of them have passwords, which were hashed using PhP's crypt function with the same salt every time of "PASSWORD_DEFAULT".

Now, because that code was very bad, I am transitioning to JavaScript where to hash passwords I am using the bcrypt Node Module with a randomly generated salt.

I was wondering, is there any way to save the old user's logins and make them valid even with the new hash, or are they gone forever?

EDIT FOR CODE:

Old PhP Code:

$stmt = $this->db->prepare(
        "INSERT INTO USERS (deviceID, latitude, longitude, username, password, date_reg) VALUES (?, ?, ?, ?, ?, CURDATE());");
        $stmt->bind_param("sddss", $deviceID, $rounded_down_lat, $rounded_down_long, $username, crypt($password, "PASSWORD_DEFAULT"));

New JavaScript/Node.js Code:

    add_user(deviceID, username, unencrypt_password, latitude, longitude, dob, gender) {
        latitude = latitude - latitude % process.env.ERR_RANGE + Number(process.env.ERR_RANGE);
        longitude = longitude - longitude % process.env.ERR_RANGE + Number(process.env.ERR_RANGE);
        var salt = bcrypt.genSaltSync(saltRounds);
        var password = bcrypt.hashSync(unencrypt_password, salt);
        var add_user_query = mysql.format(add_user_sql, [deviceID, latitude, longitude, username, password, salt, new Date(), dob, gender]);
        ...
    }
dsxon40042
dsxon40042 我是的。我使用salt和hashed-password将它们存储在数据库中,并通过传递用户名和未使用的密码并检查数据库来让用户登录。
2 年多之前 回复
doujing5937
doujing5937 我不是一个JS人,但鉴于你正在使用一个名为'bcrypt'的模块,它可能实际上就是这样做的。只是为了检查,你是在服务器端生成这些哈希,是吗?
2 年多之前 回复
duanji1056
duanji1056 啊......总而言之,我可能会这样做,但最好的方法是真正让用户设置新密码。只是为了澄清,Node.js的方式是我目前正在做的事情吗?
2 年多之前 回复
doulao5916
doulao5916 甜蜜的耶稣,这根本不是crypt()的工作方式,而且从安全的角度来看,这些哈希值是没有价值的。您仍然可以将它们与兼容密钥的lib一起使用,但是您应该立即将它们全部删除并让用户设置新的。
2 年多之前 回复
drhanjuw56233
drhanjuw56233 就这样做了!谢谢:)
2 年多之前 回复
douwo8358
douwo8358 请单击您问题下的编辑链接,而不是在评论中发布代码。评论中的代码通常非常难以辨认。
2 年多之前 回复
doutui2883
doutui2883 对不起,伙计,我是新密码哈希的东西。我将在新评论中发布代码(也是StackOverflow的新内容......)
2 年多之前 回复
dongtu9823
dongtu9823 bcrypt是bcrypt..如果你做得恰当,那么他们应该在php和节点包中验证。当你说crypt你的意思是password_hash对吗?
2 年多之前 回复
dtxb75622
dtxb75622 lol也PASSWORD_DEFAULT不是salt,它是password_hash()的参数,指定要使用的哈希算法。你应该发布一些代码和示例数据,这样我们就可以弄清楚你的实际问题/要求是什么。
2 年多之前 回复
dozabt4329
dozabt4329 只要您使用的JS库是crypt()-兼容,哈希应该是可互换的。即使没有,你应该能够实现一个垫片来完成散列存储格式。也许发布一些代码和示例哈希和你遇到的细节问题。
2 年多之前 回复
douzhanlie9209
douzhanlie9209 你的意思是Javascript还是node.js?如果你在客户端散列密码,那你就错了。
2 年多之前 回复
dousa2794
dousa2794 php.net/manual/en/function.password-hash.php“PASSWORD_DEFAULT-使用bcrypt算法(默认自PHP5.5.0起)”。所以是的,只需使用bcrypt。
2 年多之前 回复
doulei6330
doulei6330 我不知道节点模块是如何工作的,但使用PHP的密码API生成的哈希包括算法,成本和哈希值。
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐