我继承了一个拥有3000名用户的网站。我想将所有这些用户导入到基于Doplphin(Boonex)的新站点数据库中。
我试图导入数据。用户数据导入成功,但不是密码。
所有密码都已加密。
在旧数据库中,我不确定使用了什么类型的加密,猜测我认为它们不是MD5。
这是当前存储在旧数据库中的密码之一的格式。
$2a$10$M/HQVUTyxrdbiwNjokJoUOIbUAK71yvYXKPe1YdFgS2I3Pw6Ojlju
如何在导入新数据库时使这些密码正常工作?
我是否需要了解将密码导入到不同框架内的新数据库中的方法?
答案 0 :(得分: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编码OpenBSD密码文件使用的base64算法与其他人使用的Base64编码不同;他们有自己的:
Regular Base64 Alphabet: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
BSD Base64 Alphabet: ./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
所以bcrypt的任何实现都不能使用任何内置或标准的base64库
有了这些知识,您现在可以针对保存的哈希验证密码correctbatteryhorsestapler
:
$2a$12$mACnM5lzNigHMaf7O1py1O3vlf6.BA8k8x3IoJ.Tq3IB/2e7g61Km