我是靠谱客的博主 含糊羊,这篇文章主要介绍魔术hash爆破脚本,现在分享给大家,希望可以做个参考。

MD5:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#!/usr/bin/env python3 #-*- coding:utf-8 -*- import hashlib import re import os i = 215962000 while True: i += 1 c =f'0e{i}' #md5加密 m1 = hashlib.md5() m1.update(c.encode('utf-8')) m2=m1.hexdigest() #以e作为分隔符分割md5字符串 messageList = m2.split('e') if len(messageList) == 2: print(i) pattern = re.compile(r'^[0]+$') if pattern.match(messageList[0]) and messageList[1].isdigit(): print(f"{c}'s MD5 is {m2}") #输出文件 f=open("hash.txt",'a+') f.write(c+":"+m2) f.close() else: continue

MD4:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#!/usr/bin/env python3 #-*- coding:utf-8 -*- import struct import re class MD4: width = 32 mask = 0xFFFFFFFF h = [0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476] def __init__(self, msg=None): if msg is None: msg = b"" self.msg = msg ml = len(msg) * 8 msg += b"x80" msg += b"x00" * (-(len(msg) + 8) % 64) msg += struct.pack("<Q", ml) self._process([msg[i: i + 64] for i in range(0, len(msg), 64)]) def __repr__(self): if self.msg: return f"{self.__class__.__name__}({self.msg:s})" return f"{self.__class__.__name__}()" def __str__(self): return self.hexdigest() def __eq__(self, other): return self.h == other.h def bytes(self): return struct.pack("<4L", *self.h) def hexbytes(self): return self.hexdigest().encode def hexdigest(self): return "".join(f"{value:02x}" for value in self.bytes()) def _process(self, chunks): for chunk in chunks: X, h = list(struct.unpack("<16I", chunk)), self.h.copy() # Round 1. Xi = [3, 7, 11, 19] for n in range(16): i, j, k, l = map(lambda x: x % 4, range(-n, -n + 4)) K, S = n, Xi[n % 4] hn = h[i] + MD4.F(h[j], h[k], h[l]) + X[K] h[i] = MD4.lrot(hn & MD4.mask, S) # Round 2. Xi = [3, 5, 9, 13] for n in range(16): i, j, k, l = map(lambda x: x % 4, range(-n, -n + 4)) K, S = n % 4 * 4 + n // 4, Xi[n % 4] hn = h[i] + MD4.G(h[j], h[k], h[l]) + X[K] + 0x5A827999 h[i] = MD4.lrot(hn & MD4.mask, S) # Round 3. Xi = [3, 9, 11, 15] Ki = [0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15] for n in range(16): i, j, k, l = map(lambda x: x % 4, range(-n, -n + 4)) K, S = Ki[n], Xi[n % 4] hn = h[i] + MD4.H(h[j], h[k], h[l]) + X[K] + 0x6ED9EBA1 h[i] = MD4.lrot(hn & MD4.mask, S) self.h = [((v + n) & MD4.mask) for v, n in zip(self.h, h)] @staticmethod def F(x, y, z): return (x & y) | (~x & z) @staticmethod def G(x, y, z): return (x & y) | (x & z) | (y & z) @staticmethod def H(x, y, z): return x ^ y ^ z @staticmethod def lrot(value, n): lbits, rbits = (value << n) & MD4.mask, value >> (MD4.width - n) return lbits | rbits def getMD4(s): message = s.encode() return MD4(message).hexdigest() def main(): i = 0 while True: i += 1 message = f'0e{i}' messageMd4 = getMD4(message) messageList = messageMd4.split('e') if len(messageList) == 2: print(i) pattern = re.compile(r'^[0]+$') if pattern.match(messageList[0]) and messageList[1].isdigit(): print(f"{message}'s md4 is {messageMd4} by Y1ng") break else: continue if __name__ == "__main__": try: main() except KeyboardInterrupt: pass

最后

以上就是含糊羊最近收集整理的关于魔术hash爆破脚本的全部内容,更多相关魔术hash爆破脚本内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(86)

评论列表共有 0 条评论

立即
投稿
返回
顶部