如何通过大小写全排列增强字典攻击以破解 SHA-1 哈希

大宇姑娘_8305

大宇姑娘_8305

2026-08-18

491人浏览

原创

如何通过大小写全排列增强字典攻击以破解 SHA-1 哈希

本文介绍如何扩展基础字典攻击,通过生成目标单词所有大小写组合(如 "joejoe" → "joejoe", "joejoe" 等),显著提升 sha-1 哈希逆向成功率,尤其适用于含大小写字母但原始字典仅存小写形式的场景。

本文介绍如何扩展基础字典攻击,通过生成目标单词所有大小写组合(如 "joejoe" → "joejoe", "joejoe" 等),显著提升 sha-1 哈希逆向成功率,尤其适用于含大小写字母但原始字典仅存小写形式的场景。

在实际密码哈希破解中,单纯依赖原始字典(如全小写的 wordlist.txt)往往失败——因为真实密码可能包含大小写混合(如 "JoeJoe"、"j0ej0e"),而哈希值对大小写极度敏感(SHA-1("joejoe") ≠ SHA-1("JoeJoe"))。为解决该问题,需在字典攻击中动态生成每个单词的所有大小写变体,而非仅比对原词。

核心思路是:对字典中每个纯小写候选词(如 "joejoe"),穷举其每一位字符的大小写状态(小写或大写),共产生 $2^n$ 种组合($n$ 为字符长度)。例如 6 字符词将生成 64 个变体。以下为优化后的完整实现:

import hashlib

def permutecase(word):
    """生成单词所有大小写排列(仅字母参与变换,数字/符号保持不变)"""
    word = word.lower()  # 统一转小写作为基准
    n = len(word)
    results = []

    # 遍历 0 到 2^n - 1 的所有整数,每位二进制位表示对应位置是否大写
    for i in range(2 ** n):
        variant = ""
        for j, char in enumerate(word):
            if char.isalpha():  # 仅对字母应用大小写变换
                if (i >> j) & 1:  # 检查第 j 位是否为 1
                    variant += char.upper()
                else:
                    variant += char
            else:  # 数字、符号等保持原样
                variant += char
        results.append(variant)
    return results

def dictionary_attack_with_case_permutation(target_hash, dictionary_file):
    with open(dictionary_file, 'r', encoding='utf-8') as file:
        for line in file:
            base_word = line.strip()
            if not base_word:
                continue

            # 生成该词所有大小写组合
            for candidate in permutecase(base_word):
                candidate_hash = hashlib.sha1(candidate.encode()).hexdigest()
                if candidate_hash == target_hash:
                    print(f"✅ Found match: '{candidate}' → {target_hash}")
                    return candidate

            # 可选:显示进度(避免长时间无响应)
            print(f"⚠️  Tested '{base_word}' and all {2**len(base_word)} case variants — no match.")

    print("❌ Exhausted dictionary + case permutations. No match found.")
    return None

# 使用示例
if __name__ == "__main__":
    target_hash = input("Enter the target SHA-1 hash: ").strip().lower()
    dictionary_file = r'C:\Users\johnny\Documents\Security\src\wordlist.txt'

    # 安全提示:确保字典文件合理(建议长度 ≤ 8 字符,否则 2^8=256 变体尚可接受;2^12=4096 已显著增重)
    result = dictionary_attack_with_case_permutation(target_hash, dictionary_file)

关键注意事项:

jQuery+CSS3 3D立体图片排列布局代码
jQuery+CSS3 3D立体图片排列布局代码

jQuery+CSS3 3D立体图片排列布局代码

下载
  • ⚠️ 性能权衡:大小写全排列使时间复杂度呈指数增长($O(N \times 2^L)$,$N$=字典行数,$L$=单词长度)。实践中应限制字典中单词长度(推荐 ≤ 8),或优先处理高频短词。
  • ? 字符智能处理:permutecase() 函数已优化,仅对字母字符切换大小写,数字(如 "j0ej0e" 中的 0)和符号保持不变,避免无效变形。
  • ?️ 编码与健壮性:代码显式指定 encoding='utf-8' 防止读取字典时乱码;添加空行跳过与 .strip() 防止空白干扰。
  • ? 可扩展方向:如需进一步提升覆盖率,可结合常见替换(如 e→3, o→0)或首字母大写规则,但需谨慎评估计算开销。

此方法在红队演练、CTF 密码学挑战及安全意识培训中被广泛验证——它不改变哈希算法本身,而是通过更全面的明文空间探索,弥补传统字典攻击的覆盖盲区。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

排列

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

2026.09.30

80

10

LLVM RISC-V参数配置教程
LLVM RISC-V参数配置教程

本专题介绍LLVM对RISC-V基础ISA和扩展的支持方式,涵盖RV32、RV64、标准扩展、实验性扩展、厂商扩展、-menable-experimental-extensions和版本差异。

2026.09.30

80

14

LLVM IR中间表示入门指南
LLVM IR中间表示入门指南

本专题整理LLVM IR的核心概念,包括中间表示作用、模块结构、函数、基本块、SSA形式、类型系统和常见语法,帮助新手理解LLVM编译流程中的关键层。

2026.09.30

80

12

PDF转图片方法
PDF转图片方法

需要把 PDF 页面用于上传、预览、分享或图片归档时,PDF 转图片方法专题整理 JPG/PNG 格式选择、逐页导出、清晰度设置、批量下载和结果检查等流程,帮助用户稳定完成 PDF 图片化处理。

2026.09.30

60

26

PixTV AI视频生成与无限画布创作
PixTV AI视频生成与无限画布创作

PixTV专题整理AI视频与视觉内容创作相关功能使用教程,涵盖AI生图、视频生成、无限画布、多模型创作、素材管理、声音音乐及视频剪辑等功能,帮助用户快速掌握PixTV从创意到成片的完整制作方法。

2026.09.29

60

15

Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

2026.09.23

280

15

Buffalo框架路由与请求处理实操指南
Buffalo框架路由与请求处理实操指南

本专题讲解Buffalo框架路由与请求处理机制,涵盖路由注册与分组、资源路由、Handler编写规范、Context上下文方法、参数绑定、中间件编写挂载、Session与Cookie读写、Flash消息及错误页面定制方法。

2026.09.23

160

15

Buffalo框架零基础入门教程
Buffalo框架零基础入门教程

本专题整理Buffalo框架入门内容,涵盖Go环境准备、buffalo CLI安装、新项目生成、目录结构说明、dev热加载启动、数据库连接配置与常见报错排查,帮助新手按约定优于配置的思路跑通第一个Buffalo框架应用。

2026.09.23

140

15

Conan创建软件包配方指南
Conan创建软件包配方指南

本专题介绍通过conanfile.py创建软件包的方法,讲解包名、版本、依赖和构建设置等基础信息,以及source、build、package、package_info等常用方法的作用及编写思路。

2026.09.22

80

12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.6万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.4万人学习