【问题标题】:M2Crypto doesn't work like openssl for AES-128 CBCM2Crypto 不像用于 AES-128 CBC 的 openssl
【发布时间】:2013-12-08 23:41:21
【问题描述】:

我有一个简单的 python 脚本

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在Python脚本中变成SorHWZBvmWq0cH1QRmsoGo/nYzukotB/Jheg20AKk/w=,在使用openssl命令行工具时变成SorHWZBvmWq0cH1QRmsoGkPiuRPIkAGD4BHv3Hu1X7/nO9pH2TulXHRZ7gFgEDFn?我也无法在 python 脚本中解码由 openssl 编码的数据。

我做错了什么?

【问题讨论】:

    标签: python openssl m2crypto


    【解决方案1】:

    您可能没有做错任何事。您没有直接使用 OpenSSL API,而是使用命令。这个命令可能做了一些额外的事情,这就是你的输出不同的原因。

    OpenSSL 可能在您的加密数据中添加了一些盐,然后对其进行解码。

    要验证,请执行以下操作

    1. 在 OpenSSL 数据和 MCrypto 数据中进行 base64 解码。
    2. 查看它们是否完全不同或在某些时候匹配。由于 OpenSSL 可能已添加,它们可能会有很大不同。

    尝试使用 OpenSSL EVP_* 接口加密数据。

    这个question 也可能对你有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-11
      • 2019-08-17
      • 2020-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-31
      • 2022-08-17
      相关资源
      最近更新 更多