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