Conforme explicado neste tópico , PyCrypto e OpenSSL produzem a mesma saída usando o AES ECB, assumindo que você pule a função de derivação de chave com a opção -K para o OpenSSL. Eu testei e obtive a mesma saída.
No entanto, quando eu 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 ' '
Produzir a saída:
166ac1ff98632178
Por que é diferente para a cifra Blowfish?
EDITAR:
Eu fiz algumas leituras e esta discussão tem a resposta, eu acho. OpenSSL é zero-padding a 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 zere a tecla?
Receio que este SE não esteja correto para esta pergunta. Você deve consultar listas de discussão, fóruns, documentação etc. do OpenSSL, talvez stackoverflow ou security SE.