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

求助:基于提示字符串破解SHA256哈希(Python实现)

破解基于个人信息提示的8位SHA256哈希密码

已知条件

  • 目标SHA256哈希:0ba128bd856006948e7c57b714586bf43199aa898cc2bcd25141d951a34664a8
  • 密码固定长度:8
  • 个人信息提示列表:
    • ("Lars","Hansen","05","09","1984")
    • ("fido")
    • ("jan","08","08","2014")
    • ("barcelona","fodbold")

现有代码的问题分析

  1. 数据提取逻辑混乱:原代码用it.chain(user_info).from_iterable(user_info)处理提示信息,导致"fido"被拆分为单个字符,后续手动修改片段的操作容易遗漏有效候选,且逻辑不可复用。
  2. 候选片段范围过窄:仅提取每个字符串的前两位,忽略了完整短串(如"fido"是4位,可直接作为半段密码)、长串的关键子串(如"barcelona"的前/后4位)、日期组合(如"0509""1984")等常见密码元素。
  3. 组合方式单一:仅尝试4个2位片段的拼接,未考虑其他长度组合(如两个4位、4位+两个2位等),覆盖范围不足。

优化思路与解决方案

核心思路

从提示信息中提取所有可能的有效候选片段,生成所有总长度为8的片段组合,逐一计算哈希比对。

优化代码示例

import itertools
import hashlib

# 基础配置
target_hash = "0ba128bd856006948e7c57b714586bf43199aa898cc2bcd25141d951a34664a8"
password_length = 8
hints = [
    ("Lars", "Hansen", "05", "09", "1984"),
    ("fido",),
    ("jan", "08", "08", "2014"),
    ("barcelona", "fodbold")
]

# 提取所有可能的候选片段
candidates = []
for group in hints:
    for item in group:
        # 添加完整短串(长度≤8)及大小写变体
        if len(item) <= password_length:
            candidates.append(item)
            candidates.append(item.lower())
            candidates.append(item.upper())
        # 添加4位子串(适配8=4+4的组合)及大小写变体
        if len(item) >= 4:
            candidates.append(item[:4])
            candidates.append(item[-4:])
            candidates.append(item[:4].lower())
            candidates.append(item[-4:].upper())
        # 添加2位子串(适配多段2位组合)及大小写变体
        if len(item) >= 2:
            candidates.append(item[:2])
            candidates.append(item[-2:])
            candidates.append(item[:2].lower())
            candidates.append(item[-2:].upper())
# 去重+过滤无效长度
candidates = list(set(candidates))
candidates = [c for c in candidates if 1 <= len(c) <= password_length]

# 定义所有可能的长度组合(总长度=8)
valid_length_combos = [
    (4, 4),
    (2, 2, 2, 2),
    (4, 2, 2),
    (2, 4, 2),
    (2, 2, 4),
    (8,)  # 直接8位完整片段
]

# 遍历所有组合可能性
for length_set in valid_length_combos:
    segment_lists = []
    for l in length_set:
        segment_lists.append([c for c in candidates if len(c) == l])
    for combo in itertools.product(*segment_lists):
        candidate_password = ''.join(combo)
        computed_hash = hashlib.sha256(candidate_password.encode('utf-8')).hexdigest()
        if computed_hash == target_hash:
            print(f"匹配密码:{candidate_password}")
            exit()

# 额外尝试日期类完整8位组合
date_candidates = [
    "05091984", "19840509",
    "08082014", "20140808"
]
for date_pwd in date_candidates:
    if hashlib.sha256(date_pwd.encode('utf-8')).hexdigest() == target_hash:
        print(f"匹配密码:{date_pwd}")
        exit()

print("未找到匹配密码,可尝试扩展候选片段(如名字拼接子串、特殊字符变体等)")

关键优化点

  1. 全面提取候选片段:覆盖完整短串、4位/2位子串,同时补充大小写变体,符合密码常见规律。
  2. 多维度组合方式:遍历所有可能的长度组合,确保不遗漏任何符合8位长度的拼接方式。
  3. 去重与过滤:减少无效计算,提升破解效率。
  4. 针对性补充:单独处理日期类完整8位组合,这类是密码的高频选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 03:20:52