Я пытаюсь воссоздать вторую команду (расшифровку) в PyCrypto
openssl enc -aes-128-ecb -nosalt -base64 -pass pass:abcde -md sha256 -in test.txt -out out.txt
openssl enc -d -aes-128-ecb -nosalt -base64 -pass pass:abcde -md sha256 -in out.txt
Содержимое test.txt
равно flag{flagflag}
. Вывод шифрования: 0KSF5koIceXxszsgzpl4uA==
.
binascii.a2b_base64(b'0KSF5koIceXxszsgzpl4uA==')
создает тот же байтовый массив, что и openssl enc -aes-128-ecb -nosalt -pass pass:abcde -md sha256 -in test.txt -out out.txt
(без -base64
), поэтому я знаю, что декодирование base64 должно быть первым шагом.
p = "abcde".encode()
h = SHA256.new(p)
key = h.hexdigest()[:32].upper()
key
соответствует следующему выводу, поэтому я знаю, что код генерации ключа правильный:
$ openssl enc -aes-128-ecb -nosalt -pass pass:abcde -base64 -md sha256 -in test.txt -v -P
key=36BBE50ED96841D10443BCB670D6554F
bufsize=8192
Однако, если все это собрать вместе, в msg
получается мусор. Любой указатель, в котором я ошибся, будет оценен.
from Crypto.Hash import SHA256
from Crypto.Cipher import AES
import binascii
c = binascii.a2b_base64(b'0KSF5koIceXxszsgzpl4uA==')
p = "abcde".encode()
h = SHA256.new(p)
key = h.hexdigest()[:32].upper()
cipher = AES.new(key.encode(), AES.MODE_ECB)
msg = cipher.decrypt(m)
print(msg)