0

我继承了一个拥有 3000 个用户的网站。我想将所有这些用户导入一个基于 Doplphin (Bonex) 的新站点数据库。

我试图导入数据。用户数据导入成功,但密码不成功。

所有密码均已加密。

在旧数据库中,我不确定使用了什么类型的加密,我猜我认为它们不是 MD5。

这是当前存储在旧数据库中的密码之一的格式。

$2a$10$M/HQVUTyxrdbiwNjokJoUOIbUAK71yvYXKPe1YdFgS2I3Pw6Ojlju

导入新数据库时,如何使这些密码正常工作?

关于将密码导入在不同框架内工作的新数据库,我需要知道什么方法吗?

4

1 回答 1

3

该密码是BCrypt散列的。(我可以从$2a$10$...

希望您的平台具有:

BCrypt.CheckPassword(savedHash, enteredPassword);

功能。


我在这里的回答

BCrypt 哈希字符串如下所示:

$2a$10$M/HQVUTyxrdbiwNjokJoUOIbUAK71yvYXKPe1YdFgS2I3Pw6Ojlju
$==$==$======================-------------------------------

在哪里

  • 2a: 算法标识符 (BCrypt)
  • 10:成本因素(1,024 发)
  • M/HQVUTyxrdbiwNjokJoUO:OpenBSD-Base64 编码盐(22 个字符,16 个字节)
  • IbUAK71yvYXKPe1YdFgS2I3Pw6Ojlju: OpenBSD-Base64 编码散列(31 个字符,24 个字节)

编辑:我只是注意到这些词完全吻合。我不得不分享:

$2a$10$TwentytwocharactersaltThirtyonecharacterspasswordhash
$==$==$======================-------------------------------

但是BCrypt是由从事 OpenBSD 工作的人创建的。OpenBSD已经为他们的密码文件定义了一种格式:

$ [HashAlgorithmIdentifier]$[AlgorithmSpecificData]

这意味着“bcrypt 规范”与 OpenBSD 密码文件格式密不可分。每当有人创建“bcrypt hash”时,他们总是将其转换为格式为 ISO-8859-1 的字符串:

$ 2a$ [Cost]$[Base64Salt][Base64Hash]

几个重要的点:

  • 2a是算法标识符
    • 1: MD5
    • 2: 早期的 bcrypt,对哪些编码密码存在混淆(已过时)
    • 2a:当前 bcrypt,将密码指定为 UTF-8 编码
  • 成本是计算哈希时使用的成本因素。“当前”值为 10,表示内部密钥设置经过 1,024 轮
    • 10: 2 10 = 1,024 次迭代
    • 11: 2 11 = 2,048 次迭代
    • 12:2 12 = 4,096 次迭代
  • OpenBSD 密码文件使用的 base64 算法与其他人使用的 Base64 编码不同;他们有自己的:

    Regular Base64 Alphabet: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
        BSD Base64 Alphabet: ./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
    

    所以 bcrypt 的任何实现都不能使用任何内置的或标准的 base64 库


有了这些知识,您现在可以correctbatteryhorsestapler根据保存的哈希验证密码:

$2a$12$mACnM5lzNigHMaf7O1py1O3vlf6.BA8k8x3IoJ.Tq3IB/2e7g61Km
于 2012-11-10T13:16:39.610 回答