Por que PyCrypto e OpenSSL não produzem a mesma saída usando o Blowfish ECB?

4

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?

Comunidade
fonte
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.