0

Я пытаюсь улучшить текущую реализацию скрытия пароля, указаннуюНевозможно зашифровать открытый текст для пароля

Я использую это неправильно? Как ниже мой код:

import hashlib 
import binascii 
def Encrypt_Pass(password, authenticator, secret): 
     m = hashlib.md5() 
     m.update(secret+authenticator) 
     return "".join(chr(ord(x)^ord(y)) for x, y in zip(password.ljust 
     (16,'\0')[:16], m.digest()[:16])) 
result = Encrypt_Pass("abcd1","344c71c77a2b845b8856ffa968740b73","sharedsecret") 
ciphertext = "6ed3a35440abe69b2e8698109b809932"#plaintext is cisco123 
print result.encode("hex") 

Результат показан ниже:

2509f347a7c5bde3977bb944ae0eb89a 

Как вы можете видеть, возвращаемый шифротекста не соответствует зашифрованный пароль, который я захватить! Я неправильно использую код? Я проверял, что пароль открытого текста и используемый общий ключ являются точными.

Цените, если кто-то может указать мне правильное направление.

+0

[MD5 не шифрования] (https://paragonie.com/blog/2015/08/you-wouldnt-base64-a-password-cryptography-decoded). –

ответ

3

Ваш аутентификатор представляет собой шестую строку. Его нужно преобразовать в двоичную строку.

import hashlib 
from binascii import a2b_hex 

def Encrypt_Pass(password, authenticator, secret): 
    m = hashlib.md5() 
    m.update(secret + a2b_hex(authenticator)) 
    return "".join(chr(ord(x)^ord(y)) for x, y in zip(password.ljust 
     (16,'\0')[:16], m.digest()[:16])) 

result = Encrypt_Pass("cisco123","344c71c77a2b845b8856ffa968740b73","sharedsecret") 
ciphertext = "6ed3a35440abe69b2e8698109b809932"#plaintext is cisco123 
print result.encode("hex") 
+0

Могу ли я спросить, почему он должен быть двоичной строкой? –

+0

Это не должно быть, но вы должны говорить о яблоках с яблоками. Строка «344c71c77a2b845b8856ffa968740b73» на самом деле не является подлинником. Это человеко-читаемое шестнадцатеричное представление вашего аутентификатора. Было бы аналогично утверждению, что ваш аутентификатор был словом «привет», а затем использовал испанское слово «hola», чтобы попытаться пройти аутентификацию, не работая. Ваш аутентификатор должен соответствовать. – clockwatcher