md5


md5简介

md5就是信息摘要、有损压缩;

具体算法

因为md5是超损压缩,不可逆的,所以只有撞击;

例题1

比较算法如下,先在v10中构造幻数,然后将之前用户输入的v8进行md5加密,随后结果和s1进行比较:

md5的幻数示例如下:

s1的第三个字节是00,所以只需要比较前两个字符:

爆破脚本如下:(同时要注意第一个字符必须是’A’)

import hashlib
import itertools
import string
from pwn import *

# 目标 MD5 哈希值
target_hash = '1d6c00'

def strcmp(str1:str, str2:str): # str1::target, str2::hashed
length = len(str1)
for i in range(length):
if str1[i] != str2[i]:
return False
return True

# 扩展字符集:包括小写字母、大写字母、数字、符号和空格
charset = string.ascii_lowercase + string.ascii_uppercase + string.digits + string.punctuation + ' '

# 生成所有可能的字符组合
def brute_force(target_hash):
for length in range(1, 6): # 尝试长度为1到5的字符串
for guess in itertools.product(charset, repeat=length):
guess_str = ''.join(guess)
hashed = hashlib.md5(guess_str.encode()).hexdigest()
if strcmp(target_hash, hashed):
print(hashed, guess_str)
#return guess_str

return None

result = brute_force(target_hash)
if result:
print(f'破解成功: {result}')
else:
print('未找到匹配')


文章作者: q1ming
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 q1ming !
  目录