You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Delphi 11.3 FMX中是否有等价于PHP password_verify的函数?

在Delphi 11.3 FMX中验证PHP password_hash()生成的哈希密码

Delphi 11.3 FMX本身没有内置与PHP password_verify()功能完全一致的函数,但可以通过纯Pascal实现的跨平台BCrypt库达成需求——因为PHP的password_hash(PASSWORD_DEFAULT)默认采用BCrypt算法(哈希前缀为$2y$,与标准BCrypt的$2b$验证逻辑完全兼容)。

实现方案

  1. 选用跨平台BCrypt库:挑选纯Pascal编写的BCrypt实现(仅依赖RTL函数,不绑定VCL组件),这类库可直接在FMX项目中编译运行。
  2. 适配PHP哈希前缀:PHP的$2y$是BCrypt的变种,验证逻辑与标准$2b$一致,只需将哈希中的$2y$替换为$2b$即可正常验证。

代码示例

function VerifyPHPPassword(const Password, Hash: string): Boolean;
var
  AdjustedHash: string;
begin
  // 替换PHP特有的$2y$前缀为标准BCrypt的$2b$
  AdjustedHash := StringReplace(Hash, '$2y$', '$2b$', [rfReplaceAll]);
  // 调用跨平台BCrypt库的验证函数
  Result := BCrypt.CheckPassword(Password, AdjustedHash);
end;

// 测试验证逻辑
var
  TestPassword: string;
  TestHash: string;
begin
  TestPassword := 'thisismyaccesscode';
  TestHash := '$2y$10$21qire0Qwz/gj6HEej3tf.skdiZzeB.rgFdg7qD.5rAhE/AFg.U8q';
  if VerifyPHPPassword(TestPassword, TestHash) then
    ShowMessage('密码验证通过')
  else
    ShowMessage('密码验证失败');
end;

注意事项

  • 确保所选BCrypt库支持处理$2b$前缀的哈希值,绝大多数纯Pascal实现都兼容该标准格式。
  • 前缀替换仅用于适配验证逻辑,无需修改PHP生成的原始哈希,不会影响验证结果的准确性。

内容的提问来源于stack exchange,提问作者M Eugene

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 08:12:42