4

Как объяснено в этом потоке, PyCrypto и OpenSSL выдают одинаковые выходные данные, используя AES ECB, при условии, что вы пропускаете функцию вывода ключа с опцией -K для OpenSSL. Я проверил это и получил тот же результат.

Однако, когда я использую Blowfish ECB, я получаю совершенно другой результат. Этот код:

from Crypto.Cipher import Blowfish
key = 'secret'
plaintext = 'abcdefgh'
cipher = Blowfish.new(key, Blowfish.MODE_ECB)
ciphertext = cipher.encrypt(plaintext)
print ciphertext.encode('hex')

Производит вывод:

03582d2666553c05

Эти команды:

key=$(printf 'secret' | od -tx1 -An -v | tr -d ' ')
printf 'abcdefgh' | openssl enc -bf-ecb -nopad -K "$key" | od -tx1 -An -v | tr -d ' '

Произведите вывод:

166ac1ff98632178

Чем он отличается от шифра Blowfish?

РЕДАКТИРОВАТЬ:

Я немного прочитал, и у этой ветки есть ответ, я думаю. OpenSSL обнуляет ключ до 128 бит. Посмотрите, что происходит, когда вы меняете

key = 'secret'

в

key = 'secret1234567890'

Есть ли способ обойти это - я ничего не вижу в руководстве OpenSSL? Есть ли другая программа командной строки, которая не набирает ноль клавиши?

0