如果我更改我的服务器 bcrypt 可以记住加盐和解密密码,那该怎么做?

If I change my server bcrypt can remember salt and decrypt Password,How can do that?

我想将我的程序部署到另一台服务器上。我的脚本能否正确解密数据库中客户的所有密码?

//old server
const bcrypt = require("bcrypt");
const salt = bcrypt.genSalt();
password = bcrypt.hash("password", salt);

//new server 
const auth = bcrypt.compare(password, "password")

BCrypt 如何使用随机生成的变量盐来解密密码?

BCrypt 哈希以两种形式之一存储。

更常见的是 Modular Crypt Format,形式为...

y$kV7kssmFuFOydBewIp9ele8GMkWGDPpte6jGGDAabpsBmxtzWxfZW

其中:

  • $是分隔符
  • 2表示算法为BCrypt
  • y 是 BCrypt
  • 的版本
  • 10 是成本
  • kV7kssmFuFOydBewIp9ele是盐
  • 8GMkWGDPpte6jGGDAabpsBmxtzWxfZW 是散列。

一个更现代的替代方案是 PHC string format,这使得哪些部分对应于哪些值更加明显:

$bcrypt$v=98$r=10$cIF1Ev2ATA6/iYv4kddXCQ$qcrDoGjsiB2eLq1/vCZWiAZ8bEs4+Qs

在这两种情况下,保存到数据库中的字符串是完全可移植的,并且包含比较候选密码所需的一切:散列、盐、成本、算法名称和算法版本。