【问题标题】:Decrypting Amazon SP API Report Document using python. AES, CBC, base64使用 python 解密 Amazon SP API 报告文档。 AES、CBC、base64
【发布时间】:2021-06-25 15:10:23
【问题描述】:

我正在尝试解密报告文档。我有以下解密细节:

{
"payload": {
    "reportDocumentId": "XXXX",
    "encryptionDetails": {
        "standard": "AES",
        "initializationVector": "XXXX",
        "key": "XXXX"
    },
    "url": "https://XXXXX"
}}

使用这些细节,我尝试编写各种代码,给出不同的错误 1.

from base64 import b64encode 
import hashlib 
import pyaes 
import os
from sys import getsizeof

content = requests.get(url)
ciphertext = content.text
#ciphertext = b64encode(bytes(content.text))
print(getsizeof(key))
print(getsizeof(iv))
decrypter = pyaes.Decrypter(pyaes.AESModeOfOperationCBC(key, iv)) 
decryptedData = decrypter.feed(ciphertext) 
decryptedData += decrypter.feed()
print(decryptedData)

这显示了以下错误:ValueError: Initialization vector must be 16 bytes 我的初始化向量和密钥在 base64 中。它们的大小分别是 73 和 93

2.

content = requests.get(url)

message = content.text
print(len(message))

obj = AES.new(key, AES.MODE_CBC, iv)
print(obj.decrypt(message))

这会产生以下错误:ValueError: Incorrect AES key length (44 bytes)

我该如何解决这个问题?除此之外的任何方法也将非常有帮助

AWS KMS 是否有助于解密此类数据?

【问题讨论】:

  • 由于您没有显示初始化向量 IV) 也没有显示密钥,因此很难提供帮助,但是 IV 必须是 16 的固定长度(在 Base64 解码之后)并且 AES 密钥需要准确16 或 24 或 32 字节长(Base64 解码后)。
  • 在创建 AES.new 对象之前感谢 @MichaelFehr 我 b64decode 密钥和 iv,这使得密钥的长度 = 32 和 iv=16。之后,我就成功拿到了解密后的消息。

标签: python encryption aes python-cryptography amazon-kms


【解决方案1】:
content = requests.get(url)
message = content.content
dec_key = b64decode(key)
dec_iv = b64decode(iv)
obj = AES.new(dec_key, AES.MODE_CBC, dec_iv)
decrypt_text = obj.decrypt(message)

修改后的代码给出了所需的输出。解码密钥和iv。 这个答案不是我的,我是从关于stackoverflow的各种问题中收集的。为任何可能需要它的人编写它。

【讨论】:

  • 嗨 Manaal,但是解密文本 - 给出了这个输出 ERROR:需要一个类似字节的对象,而不是 'str'
猜你喜欢
  • 2013-08-11
  • 2019-06-27
  • 1970-01-01
  • 2018-04-04
  • 2015-08-22
  • 2022-08-03
  • 2017-09-28
  • 2021-08-13
  • 1970-01-01
相关资源
最近更新 更多