gpt4 book ai didi

delphi - Delphi 有可用的 bcrypt 实现吗?

转载 作者:行者123 更新时间:2023-12-03 14:36:19 25 4
gpt4 key购买 nike

我正在尝试找到一个可以在 Delphi 中使用的 bcrypt 实现。谷歌搜索给我带来的唯一有用的东西是 this download page ,包含名为 bcrypt.h 的 winapi 单元的翻译 header 。但当我查看它提供的功能时,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 使用成本因素,该因素决定 key 设置将进行多少次迭代。成本越高,计算哈希值的成本就越高。常量BCRYPT_COST包含默认成本:

const
BCRYPT_COST = 10; //cost determintes the number of rounds. 10 = 2^10 rounds (1024)

在这种情况下,10 的成本意味着 key 将被扩展并加盐 210=1,024 轮。这是目前(21 世纪初)常用的成本因素。

值得注意的是,由于未知的原因,OpenBSD 哈希密码被转换为 Base-64 变体,该变体与地球上其他人使用的 Base64 不同。因此,TBCrypt 包含自定义的 base-64 编码器和解码器。

值得注意的是,哈希算法版本 2a 用于表示:

  • bcrypt
  • 在哈希数据中包含密码的空终止符
  • unicode 字符串采用 UTF-8 编码

这就是为什么 HashPasswordCheckPassword 函数采用 WideString (又名 UnicodeString),并且在内部将它们转换为 UTF-8。如果您在 UnicodeString 是保留字的 Delphi 版本上运行此程序,则只需定义:

type
UnicodeString = WideString;

正如 David Heffernan 所知,我没有 Delphi XE 2。我添加了 UnicodeString 别名,但没有包含 compilers.inc 并定义了 UnicodeString (因为我不知道定义名称,也无法测试它)。您想从免费代码中得到什么?

代码由两个单元组成:

  • Bcrypt.pas (我写的,带有嵌入式 DUnit 测试)
  • Blowfish.pas (Dave Barton 编写的,我对其进行了改编、扩展、修复了一些错误并添加了 DUnit 测试)。

我可以在管间的哪个位置放置一些代码,让它永久存在?

更新 1/1/2015:它已被放置到 GitHub 上一段时间:BCrypt for Delphi .

奖金 4/16/2015:现在有 Scrypt for Delphi

关于delphi - Delphi 有可用的 bcrypt 实现吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9710205/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com