Как объяснено в этом потоке, 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? Есть ли другая программа командной строки, которая не набирает ноль клавиши?