Я в процессе реализации псевдокода Википедии для алгоритма хеширования MD5. Он включает в себя несколько операций, называемых «leftrotate», которые я назвал «сдвиг влево». Однако, когда я реализую код, кажется, что все работает до тех пор, пока не сдвинется левый. Я не уверен, что это правильный выбор для этой реализации, и что я делаю неправильно, чтобы получить ошибки, или если я даже правильно подхожу к этой реализации.
# Process the message in successive 512-bit chunks:
binaryArray = [binary[i:i+512] for i in range(0, len(binary), 512)]
for chunk in binaryArray:
M = [int(chunk[i:i+32]) for i in range(0,len(chunk),32)]
A = a0
B = b0
C = c0
D = d0
for i in list(range(0,64)):
if i >= 0 and i <= 15:
F = (B&C)|((~B)&D)
g = i
elif i >= 16 and i <=31:
F = (D&B)|((~D)&C)
g = (5*i+1)%16
elif i >= 32 and i <= 47:
F = (B^C)^D
g = (3*i+5)%16
elif i >= 48 and i <= 63:
F = C^(B|(~D))
g = (7*i)%16
F = F + A + K[i] + M[g]
A = D
D = C
C = B + (F<<s[i]) #This is where the error occurs
a0 = a0 + A
b0 = b0 + B
c0 = c0 + C
d0 = d0 + D
Ожидается: выходной файл, содержащий хэш MD5 строки открытого текста
Получение: ошибки или пустой выходной файл