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

4

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?

    
por Community 23.03.2017 / 01:34

0 respostas

Tags