如何将用户名登录详细信息成功移动到另一个数

时间:2012-11-10 13:11:33

标签: database passwords phpmyadmin password-encryption

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

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

所有密码都已加密。

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

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

$2a$10$M/HQVUTyxrdbiwNjokJoUOIbUAK71yvYXKPe1YdFgS2I3Pw6Ojlju

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

我是否需要了解将密码导入到不同框架内的新数据库中的方法?

1 个答案:

答案 0 :(得分:3)

该密码为BCrypt哈希值。 (我可以从$2a$10$...

告诉我

希望您的平台有一个:

BCrypt.CheckPassword(savedHash, enteredPassword);

功能


来自my answer over here

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