Como explicado em este thread , PyCrypto e OpenSSL produzem a mesma saída usando AES ECB, assumindo que você pule a função de derivação de chave com a opção -K para OpenSSL. Eu testei e obtive a mesma saída.
No entanto, quando uso o Blowfish ECB, recebo uma saída completamente diferente. Este código:
from Crypto.Cipher import Blowfish
key = 'secret'
plaintext = 'abcdefgh'
cipher = Blowfish.new(key, Blowfish.MODE_ECB)
ciphertext = cipher.encrypt(plaintext)
print ciphertext.encode('hex')
Produz a saída:
03582d2666553c05
Estes comandos:
key=$(printf 'secret' | od -tx1 -An -v | tr -d ' ')
printf 'abcdefgh' | openssl enc -bf-ecb -nopad -K "$key" | od -tx1 -An -v | tr -d ' '
Produza a saída:
166ac1ff98632178
Por que é diferente para a cifra Blowfish?
EDITAR:
Eu fiz algumas leituras e este thread tem a resposta, eu acho. O OpenSSL é o preenchimento nulo da chave para 128 bits. Veja o que acontece quando você muda
key = 'secret'
para
key = 'secret1234567890'
Existe alguma maneira de contornar isso - não vejo nada no manual do OpenSSL? Existe outro programa de linha de comando que não zera a tecla?
Tags openssl