2013-12-08 2 views
0

У меня есть простой питон скриптM2Crypto не работает, как OpenSSL для AES-128 CBC

import binascii 
import M2Crypto 

data = 'my super secret text to encrypt' 
print 'secret data: ', data 
key = '\0' * 16 
iv = key 
key_iv_as_hex = binascii.b2a_hex(key) 
print 'hex representation of key/iv: ', key_iv_as_hex 

ENC = 1 # means we are encrypting 
cipher_enc = M2Crypto.EVP.Cipher(alg='aes_128_cbc', key=key, iv=iv, op=ENC) 
v1 = cipher_enc.update(data) 
v1 = v1 + cipher_enc.final() 
encrypted_data_as_base64 = binascii.b2a_base64(v1) 
print 'encrypted base64 data: ', encrypted_data_as_base64 

Результат:

secret data: my super secret text to encrypt 
hex representation of key/iv: 00000000000000000000000000000000 
encrypted base64 data: SorHWZBvmWq0cH1QRmsoGo/nYzukotB/Jheg20AKk/w= 

Когда я зашифровать ту же строку с помощью OpenSSL командной строки инструмент, который я получить различные зашифрованные данные:

echo 'my super secret text to encrypt' >> in.txt 
openssl enc -aes-128-cbc -e -in in.txt -out out.txt -a -K 00000000000000000000000000000000 -iv 00000000000000000000000000000000 
cat out.txt 
SorHWZBvmWq0cH1QRmsoGkPiuRPIkAGD4BHv3Hu1X7/nO9pH2TulXHRZ7gFgEDFn 

Почему my super secret text to encrypt становится SorHWZBvmWq0cH1QRmsoGo/nYzukotB/Jheg20AKk/w= в Python s cript и становится SorHWZBvmWq0cH1QRmsoGkPiuRPIkAGD4BHv3Hu1X7/nO9pH2TulXHRZ7gFgEDFn, когда используется инструмент командной строки openssl? Я также не могу декодировать данные, закодированные openssl в сценарии python.

Что делать неправильно?

ответ

0

Возможно, вы не сделали ничего плохого. Вы не используете OpenSSL API напрямую, а команду. Возможно, эта команда сделала что-то дополнительное, поэтому ваш результат отличается.

OpenSSL, возможно, добавил немного соли в ваши зашифрованные данные, а затем расшифровал их.

Для проверки, выполните следующие действия

  1. ли base64 декодирование в данных OpenSSL и данных MCrypto.
  2. Проверьте, не отличаются ли они в какой-то момент или не совпадают. Они могут значительно различаться, поскольку OpenSSL может быть добавлен.

Попытайтесь зашифровать данные с помощью интерфейсов OpenSSL EVP_ *.

Этот question также может вам помочь.

+0

-nosalt не помогло. – Zelid

Смежные вопросы