我正在尝试用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)
我发现了问题:密钥编码是错误的:它不是将
key
编码为utf8以获取bytearray,它应该将key
视为十六进制数并将其解码为bytearray相关问题 更多 >
编程相关推荐