我正在尝试找到一个Delphi可以使用的bcrypt实现。在谷歌搜索中,关于唯一有用的是这个下载页面,其中包含了一个名为bcrypt.h的winapi单元的翻译头文件。但是当我查看它提供的功能时,bcrypt.h似乎并不包含任何使用Blowfish算法来哈希密码的方式!
我找到了一些C语言的bcrypt实现,可以从中构建DLL并链接,但它们似乎都需要*nix或特定于GCC,因此也行不通!
这真的让我很恼火。我原以为会很容易找到实现,但事实并非如此。有人知道哪里可以获取一个吗?
好的,我写完了。
使用方法:
hash: string;
hash := TBCrypt.HashPassword('mypassword01');
返回类似于以下内容:
$2a$10$Ro0CUfOqk6cXEKf3dyaM7OhSCvnwM9s4wIX9JeLapehKK5YdLxKcm
这种(OpenBSD)风格的密码哈希的有用之处在于:
2a
= bcrypt)。Ro0CUfOqk6cXEKf3dyaM7O
)。10
)。要检查密码是否正确:
isValidPassword: Boolean;
isValidPassword := TBCrypt.CheckPassword('mypassword1', hash);
BCrypt使用一个cost因子,确定密钥设置将经过多少次迭代。成本越高,计算哈希值的成本就越高。常量BCRYPT_COST
包含默认成本:
const
BCRYPT_COST = 10; //cost determintes the number of rounds. 10 = 2^10 rounds (1024)
在这种情况下,成本为10
表示该密钥将被扩展和盐化210
= 1,024轮。这是目前通常使用的成本因子(21世纪初)。TBCrypt
包含自定义的base-64编码器和解码器。2a
用于表示:HashPassword
和CheckPassword
函数接受WideString
(也称为UnicodeString
),并在内部将其转换为UTF-8。如果您在运行此代码的Delphi版本中UnicodeString
是保留字,则可以简单地定义输出:type
UnicodeString = WideString;
我,就像David Heffernan所知道的那样,并没有拥有Delphi XE 2。我添加了UnicodeString
别名,但没有包含compilers.inc
并且没有定义UnicodeString
(因为我不知道定义名称,也无法进行测试)。你想要从免费代码得到什么?
代码由两个单元组成:
在互联网上,哪里可以放置一些代码,使其永久存在?
更新 2015年1月1日: 它已经在GitHub上发布了一段时间:BCrypt for Delphi。
奖励 2015年4月16日:现在有Scrypt for Delphi。
bcrypt.pas
,blowfish.pas
)链接到 Pastebin 网站。 - Ian Boyd
bcrypt.h
winapi头文件的另一个翻译,但它似乎并不包含Blowfish密码哈希实现。(或者我错过了什么?) - Mason Wheeler