该密码是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