You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何破解自定义SHA-256加盐哈希获取用户明文密码?

破解自有数据库中SHA-256截断哈希的方法

首先先明确你的哈希计算逻辑,避免后续操作出错:

哈希生成规则:truncate(hexstring(SHA256("potPlantSalt" + password + salt)), 32)
也就是先拼接固定字符串potPlantSalt、明文密码、用户salt5aa8698c4022fe1d,计算SHA-256哈希后转成十六进制字符串,最终取前32个字符存入数据库。

核心思路:字典攻击(优先推荐)

既然是处理自己的数据库(务必确保合法授权!未经授权破解他人数据是违法行为),最高效的方式就是字典攻击——用常见密码列表逐一按照规则计算哈希,和目标哈希对比匹配。

具体实现方法

方法1:Python脚本(适合新手,直观易理解)

写个简单的Python脚本,自动遍历密码字典并对比哈希:

import hashlib

# 配置参数
FIXED_STRING = "potPlantSalt"
TARGET_HASH = "2b1ac087bd54ea9dcbfba2c3e63b2335"
USER_SALT = "5aa8698c4022fe1d"
DICTIONARY_PATH = "rockyou.txt"  # 替换成你的字典文件实际路径

def find_password():
    with open(DICTIONARY_PATH, "r", encoding="latin-1") as dict_file:
        for line in dict_file:
            password = line.strip()
            # 拼接字符串并计算哈希
            combined_input = FIXED_STRING + password + USER_SALT
            hash_result = hashlib.sha256(combined_input.encode()).hexdigest()
            # 截断前32位字符
            truncated_hash = hash_result[:32]
            # 对比哈希
            if truncated_hash == TARGET_HASH:
                print(f"✅ 找到明文密码:{password}")
                return
    print("❌ 字典中未找到匹配的密码,建议更换字典或尝试掩码攻击")

if __name__ == "__main__":
    find_password()
使用说明:
  1. 下载常用密码字典(比如rockyou.txt,这是最流行的通用密码字典,注意需要解压后使用)。
  2. 修改脚本中的DICTIONARY_PATH为你的字典文件实际路径。
  3. 运行脚本,等待结果即可。

方法2:Hashcat(高效,适合大规模字典或GPU加速)

如果你有GPU,Hashcat的破解效率会比Python脚本高很多,步骤如下:

  1. 创建哈希文件hash_target.txt,内容格式为[目标哈希]:[用户salt]
2b1ac087bd54ea9dcbfba2c3e63b2335:5aa8698c4022fe1d
  1. 运行Hashcat命令:
hashcat -m 0 -a 0 hash_target.txt rockyou.txt --custom-rule '^potPlantSalt $2' --output-found found_password.txt
  • -m 0:指定哈希类型为SHA-256
  • -a 0:指定攻击模式为字典攻击
  • --custom-rule:自定义拼接规则,把固定字符串potPlantSalt加在密码前缀,再拼接用户salt
  • --output-found:把找到的密码输出到指定文件

进阶:掩码攻击(如果字典攻击失败)

如果字典里没有匹配的密码,而你知道密码的格式(比如长度8位、包含字母+数字),可以尝试掩码攻击:

hashcat -m 0 -a 3 hash_target.txt ?a?a?a?a?a?a?a?a --custom-rule '^potPlantSalt $2'
  • -a 3:掩码攻击模式
  • ?a:代表所有可打印字符(字母、数字、符号),你可以根据已知条件替换,比如?l?l?l?l?d?d?d?d代表4个小写字母+4个数字

重要提醒

请务必确认你对该数据库拥有合法的测试权限,未经授权的破解行为违反法律和道德规范,后果自负。

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

火山引擎 最新活动