第一步:安装 Python
- 下载 Python:访问 Python 官网 下载并安装最新版本的 Python。
- 安装时选择添加到环境变量 PATH:在安装过程中,确保勾选“Add Python to PATH”选项。
第二步:编写 Python 脚本
- 创建一个新的 Python 文件:使用文本编辑器(如 VSCode、Notepad++ 或 PyCharm)创建一个新的文件,命名为 MISC-SHA-1解密
.py
。
运行以下命令以确保Python和pip已正确安装:
python --version
pip --version
- 编写代码:在文件中编写你的 Python 代码。例如,下面是一个简单的示例代码:
以这个py脚本为例,这里面写的是SHA-1的解密py脚本(简易)
import hashlib
import stringdef sha1_hash(input_string):sha1 = hashlib.sha1()sha1.update(input_string.encode('utf-8'))return sha1.hexdigest()# 生成字符集合,包括数字、小写字母、大写字母和特殊字符
characters = string.ascii_letters + string.digits + "!@#$%^&*()-_=+[]{}|;:',.<>?/`~" # a-z, A-Z, 0-9, 特殊字符# 要匹配的目标SHA-1散列值
target_hashes = ['7cf184f4c67ad58283ecb19349720b0cae756829', '50c9e8d5fc98727b4bbc93cf5d64a68db647f04f','32096c2e0eff33d844ee6d675407ace18289357d','c2c53d66948214258a26ca9ca845d7ac0c17f8e7','e69f20e9f683920d3fb4329abd951e878b1f9372',
] # 请确保这些是您要匹配的散列值# 初始化一个列表来存储匹配结果
matching_results = []# 以目标散列值的顺序进行匹配
for target_hash in target_hashes:found = False # 标记匹配是否找到for char in characters:# 计算当前字符的SHA-1散列current_hash = sha1_hash(char)# 检查是否与目标散列匹配if current_hash == target_hash:matching_results.append(char) # 直接存储字符,即使重复也会添加found = True# 如果没有找到匹配的字符,则添加空字符串if not found:matching_results.append(' ') # 添加一个空字符串作为未找到的匹配表示# 将匹配结果拼接成字符串
result_string = ''.join(matching_results)# 输出最终结果格式
final_result = f"{{{result_string}}}"
# 如果需要去掉多余的空格,使用strip()函数
print(final_result.strip()) # 打印格式化后的结果
第三步:安装 PyInstaller打包
- 打开命令提示符:按
Win + R
,输入cmd
,然后按 Enter。 - 安装 PyInstaller:在命令提示符中输入以下命令并按 Enter:
-
打开命令行:在您的计算机上打开命令行工具(例如CMD或PowerShell)。
-
导航到脚本所在目录:使用
cd
命令移动到包含您的Python脚本的目录。例如:
如下图所示,右键点击复制路径
第四步:将 Python 脚本转换为 .exe 文件
- 导航到脚本所在目录:使用
cd
命令导航到包含MISC-SHA-1解密.py
的目录。例如:
这个是我的路径如下所示,要去到E盘
cd "E:\桌面文件\happy 2024\解题脚本存放"
- 运行 PyInstaller:输入以下命令将脚本转换为可执行文件:
我的路径如下
PS E:\桌面文件\happy 2024\解题脚本存放> pyinstaller --onefile --windowed MISC-SHA-1解密.py
第五步:找到生成的 .exe 文件
如下图所示,
我生成的文件在E:\桌面文件\happy 2024\解题脚本存放\dist\MISC-SHA-1解密.exe
- 查找输出目录:PyInstaller 会在当前目录下创建一个
dist
文件夹。 - 找到 .exe 文件:在
dist
文件夹中,你会找到名为 MISC-SHA-1解密.exe
第六步:运行 .exe 文件
双击MISC-SHA-1解密.exe 文件,应该会看到一个命令行窗口弹出
如下图所示
附录 :SHA-1解密exe文件资源
可执行文件如下:
可执行脚本如下:
import hashlib
import stringdef sha1_hash(input_string):sha1 = hashlib.sha1()sha1.update(input_string.encode('utf-8'))return sha1.hexdigest()
# 生成字符集合
characters = string.ascii_letters + string.digits + "!@#$%^&*()-_=+[]{}|;:',.<>?/`~" # a-z, A-Z, 0-9
# 将所有字符的SHA-1散列存储到字典中
hash_map = {sha1_hash(char): char for char in characters}# 要匹配的SHA-1散列列表(在这里写入要解密的SHA-1散列)
hashes_to_match = ['7cf184f4c67ad58283ecb19349720b0cae756829','50c9e8d5fc98727b4bbc93cf5d64a68db647f04f','32096c2e0eff33d844ee6d675407ace18289357d','c2c53d66948214258a26ca9ca845d7ac0c17f8e7','e69f20e9f683920d3fb4329abd951e878b1f9372','60ba4b2daa4ed4d070fec06687e249e0e6f9ee45','da4b9237bacccdf19c0760cab7aec4a8359010b0','da4b9237bacccdf19c0760cab7aec4a8359010b0','84a516841ba77a5b4648de2cd0dfcb30ea46dbb4','356a192b7913b04c54574d18c28d46e6395428ab','da4b9237bacccdf19c0760cab7aec4a8359010b0','3c363836cf4e16666669a25da280a1865c2d2874','86f7e437faa5a7fce15d1ddcb9eaeaea377667b8','3c363836cf4e16666669a25da280a1865c2d2874','84a516841ba77a5b4648de2cd0dfcb30ea46dbb4','ac3478d69a3c81fa62e60f5c3696165a4e5e6ac4','b6589fc6ab0dc82cf12099d1c2d40ab994e8410c','fe5dbbcea5ce7e2988b8c69bcfdfde8904aabc1f','58e6b3a414a1e090dfc6029add0f3555ccba127f','ac3478d69a3c81fa62e60f5c3696165a4e5e6ac4','4a0a19218e082a343a1b17e5333409af9d98f0f5','58e6b3a414a1e090dfc6029add0f3555ccba127f','86f7e437faa5a7fce15d1ddcb9eaeaea377667b8','356a192b7913b04c54574d18c28d46e6395428ab','da4b9237bacccdf19c0760cab7aec4a8359010b0','4a0a19218e082a343a1b17e5333409af9d98f0f5','da4b9237bacccdf19c0760cab7aec4a8359010b0','58e6b3a414a1e090dfc6029add0f3555ccba127f','e9d71f5ee7c92d6dc9e92ffdad17b8bd49418f98','fe5dbbcea5ce7e2988b8c69bcfdfde8904aabc1f','84a516841ba77a5b4648de2cd0dfcb30ea46dbb4','0ade7c2cf97f75d009975f4d720d1fa6c19f4897','58e6b3a414a1e090dfc6029add0f3555ccba127f','e9d71f5ee7c92d6dc9e92ffdad17b8bd49418f98','1b6453892473a467d07372d45eb05abc2031647a','ac3478d69a3c81fa62e60f5c3696165a4e5e6ac4','c1dfd96eea8cc2b62785275bca38ac261256e278','902ba3cda1883801594b6e1b452790cc53948fda','c2b7df6201fdd3362399091f0a29550df3505b6a'
]# 根据散列值输出对应的字符,未找到的散列输出空格
result = []
for hash_value in hashes_to_match:result.append(hash_map.get(hash_value, " "))# 输出结果
print("对应字符输出:")
print("".join(result))
SHA-1
SHA-1(安全散列算法1)是一种广泛使用的加密散列函数,它将任意长度的数据输入转换为固定长度的160位(20字节)散列值。SHA-1的原理可以分为以下几个步骤:
1. 填充数据:首先,输入数据会被填充到一个特定的长度,使其长度对512取模等于448。填充的方式是先添加一个“1”位,然后添加足够数量的“0”位,最后在数据末尾添加一个64位的表示原始数据长度的二进制数。
2. 分块处理:填充后的数据被分成多个512位(64字节)的块。SHA-1会逐块处理这些数据。
3. 初始化哈希值:SHA-1使用五个32位的初始哈希值(H0, H1, H2, H3, H4),这些值是固定的,来源于特定的常数。
4. 消息扩展:对于每个512位的块,SHA-1会生成80个32位的消息字(W0到W79)。前16个字直接来自当前块,后64个字通过特定的公式从前面的字生成。
5. 主循环:SHA-1的核心是一个主循环,执行80次迭代。在每次迭代中,使用当前的哈希值、消息字和一个常数进行计算,更新哈希值。
6. 输出结果:处理完所有块后,最终的哈希值由五个32位的哈希值(H0到H4)组合而成,形成一个160位的散列值。
SHA-1哈希算法流程
对于任意长度的明文,SHA1首先对其进行分组,使得每一组的长度为512位,然后对这些明文分组反复重复处理。
对于每个明文分组的摘要生成过程如下:
(1) 将512位的明文分组划分为16个子明文分组,每个子明文分组为32位。
(2) 申请5个32位的链接变量,记为A、B、C、D、E。
(3) 16份子明文分组扩展为80份。
(4) 80份子明文分组进行4轮运算。
(5) 链接变量与初始链接变量进行求和运算。
(6) 链接变量作为下一个明文分组的输入重复进行以上操作。
(7) 最后,5个链接变量里面的数据就是SHA1摘要。
SHA-1的分组过程
对于任意长度的明文,SHA1的明文分组过程与MD5相类似,首先需要对明文添加位数,使明文总长度为448(mod512)位。在明文后添加位的方法是第一个添加位是l,其余都是0。然后将真正明文的长度(没有添加位以前的明文长度)以64位表示,附加于前面已添加过位的明文后,此时的明文长度正好是512位的倍数。与MD5不同的是SHA1的原始报文长度不能超过2的64次方,另外SHA1的明文长度从低位开始填充。
经过添加位数处理的明文,其长度正好为512位的整数倍,然后按512位的长度进行分组(block),可以划分成L份明文分组,我们用Y0,Y1,……YL-1表示这些明文分组。对于每一个明文分组,都要重复反复的处理,这些与MD5是相同的。
对于512位的明文分组,SHA1将其再分成16份子明文分组(sub-block),每份子明文分组为32位,我们使用M[k](k= 0, 1,……15)来表示这16份子明文分组。之后还要将这16份子明文分组扩充到80份子明文分组,我们记为W[k](k= 0, 1,……79),扩充的方法如下。
W t = M t , 当0≤t≤15
W t = ( W t-3 ⊕ W t-8⊕ W t-14⊕ W t-16 ) <<< 1, 当16≤t≤79
SHA1有4轮运算,每一轮包括20个步骤(一共80步),最后产生160位摘要,这160位摘要存放在5个32位的链接变量中,分别标记为A、B、C、D、E。这5个链接变量的初始值以16进制位表示如下。
A=0x67452301
B=0xEFCDAB89
SHA-1的运算
SHA1有4轮运算,每一轮包括20个步骤,一共80步,当第1轮运算中的第1步骤开始处理时,A、B、C、D、E五个链接变量中的值先赋值到另外5个记录单元A′,B′,C′,D′,E′中。这5个值将保留,用于在第4轮的最后一个步骤完成之后与链接变量A,B,C,D,E进行求和操作。
SHA1的4轮运算,共80个步骤使用同一个操作程序,如下:
A,B,C,D,E←[(A<<<5)+ ft(B,C,D)+E+Wt+Kt],A,(B<<<30),C,D
其中 ft(B,C,D)为逻辑函数,Wt为子明文分组W[t],Kt为固定常数。这个操作程序的意义为:
将[(A<<<5)+ ft(B,C,D)+E+Wt+Kt]的结果赋值给链接变量A;
将链接变量A初始值赋值给链接变量B;
将链接变量B初始值循环左移30位赋值给链接变量C;
将链接变量C初始值赋值给链接变量D;
将链接变量D初始值赋值给链接变量E。
为什么要讲SAH-1这个算法呢?
SHA-1是一种广泛使用的哈希函数,它将任意长度的输入(通常是一个字符串)转换为固定长度的输出(通常是一个40字符的十六进制数)。
单个字符的SHA-1哈希值有以下特点:
1. 固定长度:无论输入的字符串有多长,SHA-1哈希函数都会生成一个40字符的十六进制数作为输出。
2. 不可逆性:SHA-1是一种单向函数,也就是说,它不能被“解密”回原始输入。一旦输入被哈希,就无法从输出中恢复原始输入。但是单个SHA-1字符可以通过逆思维来写脚本解出。
3. 碰撞抵抗:SHA-1被设计为具有抗碰撞的特性,也就是说,找到两个不同的输入,它们产生相同的哈希值是非常困难的。
4. 一致性:对于相同的输入,SHA-1总是产生相同的输出。
5. 随机性:SHA-1的输出看起来像是随机的,即使输入只有微小的变化,输出也会有很大的不同。
最后设计一个SHA-1解密大家来解一下,解出来的可以放评论区展示成果(可以使用我的脚本或者是exe文件也可以自己找在线解码来解)。
7cf184f4c67ad58283ecb19349720b0cae756829
50c9e8d5fc98727b4bbc93cf5d64a68db647f04f
32096c2e0eff33d844ee6d675407ace18289357d
c2c53d66948214258a26ca9ca845d7ac0c17f8e7
e69f20e9f683920d3fb4329abd951e878b1f9372
60ba4b2daa4ed4d070fec06687e249e0e6f9ee45
da4b9237bacccdf19c0760cab7aec4a8359010b0
da4b9237bacccdf19c0760cab7aec4a8359010b0
84a516841ba77a5b4648de2cd0dfcb30ea46dbb4
356a192b7913b04c54574d18c28d46e6395428ab
da4b9237bacccdf19c0760cab7aec4a8359010b0
3c363836cf4e16666669a25da280a1865c2d2874
86f7e437faa5a7fce15d1ddcb9eaeaea377667b8
3c363836cf4e16666669a25da280a1865c2d2874
84a516841ba77a5b4648de2cd0dfcb30ea46dbb4
ac3478d69a3c81fa62e60f5c3696165a4e5e6ac4
b6589fc6ab0dc82cf12099d1c2d40ab994e8410c
fe5dbbcea5ce7e2988b8c69bcfdfde8904aabc1f
58e6b3a414a1e090dfc6029add0f3555ccba127f
ac3478d69a3c81fa62e60f5c3696165a4e5e6ac4
4a0a19218e082a343a1b17e5333409af9d98f0f5
58e6b3a414a1e090dfc6029add0f3555ccba127f
86f7e437faa5a7fce15d1ddcb9eaeaea377667b8
356a192b7913b04c54574d18c28d46e6395428ab
da4b9237bacccdf19c0760cab7aec4a8359010b0
4a0a19218e082a343a1b17e5333409af9d98f0f5
da4b9237bacccdf19c0760cab7aec4a8359010b0
58e6b3a414a1e090dfc6029add0f3555ccba127f
e9d71f5ee7c92d6dc9e92ffdad17b8bd49418f98
fe5dbbcea5ce7e2988b8c69bcfdfde8904aabc1f
84a516841ba77a5b4648de2cd0dfcb30ea46dbb4
0ade7c2cf97f75d009975f4d720d1fa6c19f4897
58e6b3a414a1e090dfc6029add0f3555ccba127f
e9d71f5ee7c92d6dc9e92ffdad17b8bd49418f98
1b6453892473a467d07372d45eb05abc2031647a
ac3478d69a3c81fa62e60f5c3696165a4e5e6ac4
c1dfd96eea8cc2b62785275bca38ac261256e278
902ba3cda1883801594b6e1b452790cc53948fda
c2b7df6201fdd3362399091f0a29550df3505b6a