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

如何在C#中验证PHP生成的Linux SHA512格式哈希密码?

解决C#验证PHP生成的$6$开头SHA512哈希密码问题

你的数据库里$6$开头的哈希是Linux SHA-512 Crypt格式,这是Unix系统crypt(3)标准定义的加盐哈希算法,不是简单把密码和盐拼接后做SHA512哈希——这就是你原代码生成结果不匹配的核心原因。

下面是两种可行的解决方案:

方案1:用第三方库CryptSharp(推荐)

这是最简便可靠的方式,CryptSharp已经完整实现了crypt系列哈希的验证逻辑:

  1. 通过NuGet安装CryptSharp-Native包
  2. 验证代码示例:
using CryptSharp;

public bool VerifyUserPassword(string inputPassword, string storedHashFromDb)
{
    // 直接调用CheckPassword方法,自动解析哈希中的$6$标识、盐值并完成验证
    return Crypter.CheckPassword(inputPassword, storedHashFromDb);
}

这个方法完全兼容PHP内置crypto函数生成的SHA512 crypt哈希,不需要手动处理盐值或编码细节。

方案2:手动实现SHA-512 Crypt算法(不推荐)

如果不想依赖第三方库,需要严格按照crypt(3)的SHA-512规范手动实现,步骤包括:

  • 从存储的哈希中提取盐值($6$之后到下一个$的部分)
  • 按照规范进行多轮迭代哈希、字节数据混合
  • 使用crypt自定义的64字符编码(区别于标准Base64)生成最终哈希字符串并对比

但这个过程涉及大量细节处理,很容易出错,除非有特殊场景需求,否则优先选择方案1。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 01:30:52