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?


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.
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.