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

已知明文密码与盐值,能否确定所使用的哈希算法?

如何确定系统使用的密码哈希算法?

你完全可以通过已知的明文密码、对应salt和hash值来确定系统采用的哈希算法,具体方法如下:

核心逻辑

已知明文密码、关联的salt和最终hash值,只需模拟常见加盐哈希算法的计算流程,对比计算结果与数据库中的hash是否一致即可验证。

具体操作步骤

  • 先明确salt与密码的拼接规则:常见的组合方式有两种——明文密码 + salt 或 salt + 明文密码,部分算法会带固定前缀(比如bcrypt的$2a$),但你的hash字段是varchar(64),先从无前缀的主流算法入手。
  • 锁定符合64位哈希长度的候选算法:
    • SHA-256:输出固定64个十六进制字符(对应256位哈希值)
    • PBKDF2-HMAC-SHA256:若取256位输出,也会是64个十六进制字符,这类算法需注意迭代次数参数
    • HMAC-SHA256:将salt作为密钥,输出同样是64个十六进制字符
  • 用代码模拟计算验证(以Python为例):
    import hashlib
    
    # 替换为你掌握的实际值
    plain_pwd = "已知的明文密码"
    target_salt = "数据库中对应用户的salt"
    db_hash = "数据库中对应用户的password-hash"
    
    # 尝试拼接方式1:明文密码 + salt
    calc_hash1 = hashlib.sha256((plain_pwd + target_salt).encode()).hexdigest()
    # 尝试拼接方式2:salt + 明文密码
    calc_hash2 = hashlib.sha256((target_salt + plain_pwd).encode()).hexdigest()
    # 尝试PBKDF2-HMAC-SHA256(常见迭代次数:1000、10000,可多试几个)
    calc_hash3 = hashlib.pbkdf2_hmac('sha256', plain_pwd.encode(), target_salt.encode(), 1000).hex()
    
    if calc_hash1 == db_hash:
        print("使用的是SHA-256,拼接规则:明文+盐")
    elif calc_hash2 == db_hash:
        print("使用的是SHA-256,拼接规则:盐+明文")
    elif calc_hash3 == db_hash:
        print("使用的是PBKDF2-HMAC-SHA256,迭代次数1000")
    # 可继续扩展其他算法或参数的验证
    
  • 特殊情况排查:如果以上尝试不匹配,要考虑编码差异(比如系统用GBK而非UTF-8)、密码是否有额外预处理(如转大小写)、salt是否包含隐藏空格等细节。

补充说明

如果hash值带有类似$1$(MD5-CRYPT)、$2a$(bcrypt)的前缀,也可以直接对应到特定算法——不过bcrypt的哈希长度通常是60位左右,你的字段是varchar(64),也可以排查这类可能性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 02:52:36