CSSPR 4
CSSPR 4
import hashlib
def md5_padding(message):
original_length = len(message) * 8
message += b'\x80'
while len(message) % 64 != 56:
message += b'\x00'
message += original_length.to_bytes(8, byteorder='little')
return message
def md5(message):
# Initialize variables
a = 0x67452301
b = 0xEFCDAB89
c = 0x98BADCFE
d = 0x10325476
message = md5_padding(message)
# Main loop
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
temp = d
d=c
c=b
b = b + left_rotate((a + f + int.from_bytes(chunk[4*g:4*g+4], byteorder='little') +
int.from_bytes(hashlib.md5(b'').digest(), byteorder='little')),
[7,12,17,22][j//16])
a = temp
return '{:08x}{:08x}{:08x}{:08x}'.format(a, b, c, d) #
Example usage
input_message = b"THIS IS A SYSTEM GENERATED MESSAGE" md5_result_custom =
md5(input_message)
print("Custom MD5 hash of '{}' is: {}".format(input_message.decode(), md5_result_custom))
OUTPUT :
Pr 4.2 SHA-1
import struct
def sha1(message):
h0 = 0x67452301
h1 = 0xEFCDAB89
h2 = 0x98BADCFE
h3 = 0x10325476
h4 = 0xC3D2E1F0
original_byte_len = len(message)
original_bit_len = original_byte_len * 8
message += b'\x80'
while len(message) % 64 != 56:
message += b'\x00'
message += struct.pack('>Q', original_bit_len)
a = h0
b = h1
c = h2
d = h3
e = h4
output: