用python写一个MD5算法
时间: 2024-05-02 12:17:54 浏览: 7
以下是用Python编写的MD5算法示例:
```python
import math
# 左移位函数
def left_shift(n, b):
return ((n << b) & 0xffffffff) | (n >> (32 - b))
# 初始化MD缓存值
T = [int(abs(math.sin(i + 1)) * 2**32) & 0xffffffff for i in range(64)]
s = [7, 12, 17, 22] * 4 + [5, 9, 14, 20] * 4 + [4, 11, 16, 23] * 4 + [6, 10, 15, 21] * 4
# 定义MD5算法函数
def md5(message):
# 初始化缓存值
A = 0x67452301
B = 0xefcdab89
C = 0x98badcfe
D = 0x10325476
# 填充消息
message = bytearray(message)
orig_len_in_bits = (8 * len(message)) & 0xffffffffffffffff
message.append(0x80)
while len(message) % 64 != 56:
message.append(0)
message += orig_len_in_bits.to_bytes(8, byteorder='little')
# 处理消息
for i in range(0, len(message), 64):
X = message[i:i+64]
words = [int.from_bytes(X[j:j+4], byteorder='little') for j in range(0, 64, 4)]
a, b, c, d = A, B, C, D
for j in range(64):
if j < 16:
F = (b & c) | ((~b) & d)
g = j
elif j < 32:
F = (d & b) | ((~d) & c)
g = (5*j + 1) % 16
elif j < 48:
F = b ^ c ^ d
g = (3*j + 5) % 16
else:
F = c ^ (b | (~d))
g = (7*j) % 16
d = c
c = b
b = left_shift((a + F + T[j] + words[g]) & 0xffffffff, s[j]) + b
a = d
A = (A + a) & 0xffffffff
B = (B + b) & 0xffffffff
C = (C + c) & 0xffffffff
D = (D + d) & 0xffffffff
# 返回MD5值
return '{:08x}{:08x}{:08x}{:08x}'.format(A, B, C, D)
# 测试
if __name__ == '__main__':
message = 'Hello, world!'
print(md5(message.encode())) # 3e25960a79dbc69b674cd4ec67a72c62
```