如何在python中解密openssl AES-256-GCM加密的数据

如何在python中解密openssl AES-256-GCM加密的数据,python,encryption,openssl,Python,Encryption,Openssl,因此,我用以下linux加密了一些文本: echo abc >> in openssl enc -aes-256-gcm -base64 -k aaaaaaaaaaaaaaaa -iv 1234567890123456 -in in 我有以下输出: U2FsdGVkX18MpgFlt0vNFLXyrKI= 我可以用以下方法解密文本: echo "U2FsdGVkX18MpgFlt0vNFLXyrKI=" > in openssl enc -aes-256-

因此,我用以下linux加密了一些文本:

echo abc >> in
openssl enc -aes-256-gcm -base64 -k aaaaaaaaaaaaaaaa -iv 1234567890123456 -in in
我有以下输出:
U2FsdGVkX18MpgFlt0vNFLXyrKI=

我可以用以下方法解密文本:

echo "U2FsdGVkX18MpgFlt0vNFLXyrKI=" > in
openssl enc -aes-256-gcm -base64 -k aaaaaaaaaaaaaaaa -iv 1234567890123456 -in in -d
我有以下输出:
abc

我想要实现的是用python解密输出
U2FsdGVkX18MpgF1t0vNFLXyrKI=
。但我已经尝试了很多我能找到的例子,但没有一个是有效的。我完全不懂

以下是我尝试过的:

from Cryptodome.Cipher import AES
import base64

# Just To test out 
c = AES.new(b'aaaaaaaaaaaaaaaa',AES.MODE_GCM,b'1234567890123456')
enc = c.encrypt(b'abc')
print(enc)
# >> b'\xcaA\x8e'
c = AES.new(b'aaaaaaaaaaaaaaaa',AES.MODE_GCM,b'1234567890123456')
print(c.decrypt(enc))
# >> b'abc'

#Using the value from openssl
enc = base64.b64decode("U2FsdGVkX18MpgFlt0vNFLXyrKI=")
print(enc)
# >>b'Salted__\x0c\xa6\x01e\xb7K\xcd\x14\xb5\xf2\xac\xa2'

c = AES.new(b'aaaaaaaaaaaaaaaa',AES.MODE_GCM,b'1234567890123456')
print(c.decrypt(enc))
# >> b'\xf8B\x81\x98K\xcf\xebF\x92\x04{?v\xdb\xcbL\x8e\xab\x8f\xfa'
print(base64.b64encode(c.decrypt(enc)))
# >> b'l7aUC53L+qTiEzxWXziUEFckW/Y='
c = AES.new(base64.b64decode('aaaaaaaaaaaaaaaa'),AES.MODE_GCM,base64.b64decode('1234567890123456'))
#error....
print(c.decrypt(enc))

显然,openssl的enc文本是咸的,我不知道该怎么处理。

至少显示您尝试了什么以及失败的地方!当然,我已经用
-k
更新了我的问题,并指定了密码。这是有意的吗?如果是这样,OpenSSL将使用一个密钥派生函数,这在发布的Python代码中缺失。但是,如果要使用钥匙,请使用
-K
。请注意,
-iv
-K
需要十六进制数字,请参阅,这两种代码中似乎都不考虑十六进制数字。