首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用pycryptodome解密加密数据

使用pycryptodome解密加密数据
EN

Stack Overflow用户
提问于 2022-11-19 05:30:23
回答 1查看 54关注 0票数 0

我对加密/解密很陌生,但我有敏感数据,需要作为加密数据存储。我们的ETL有一个内置的加密过程,它输出以下内容

代码语言:javascript
复制
{
   "data":{
      "transformation":"AES/GCM/noPadding",
      "iv":"jlemHiOD8uiyMsqY",
      "type":"JSON",
      "ciphertext":"TOtsmTYG1jKCZXewFNPBk5xWf+q4AO8OSZPoYw==",
      "key_params":{
         "symmetric":{
            "key_algorithm":"AES"
         }
      }
   }
}

从这里开始,当我需要使用数据时,我想使用pycryptodome来解密数据。我试图运行下面的python脚本来解密,但是遇到了一些错误。我认为这与数据的格式化方式有关吗?

代码语言:javascript
复制
import pandas as pd
from Crypto.Cipher import AES

test_encrypted_value = TOtsmTYG1jKCZXewFNPBk5xWf+q4AO8OSZPoYw==
aes_iv = 'jIemHiOD8uiyMsqY'
aes_key = '4E645267556B586E3272357538782F41'

cipher = AES.new(aes_key, AES.MODE_GCM, aes_iv)

错误- TypeError: Nonce必须是字节、字节数组或内存视图。

如果删除IV,则在传递的密钥上也会出现错误。这使我认为我传递了错误的数据类型/格式。

error - TypeError:对象类型不能传递给C代码

根据响应更新,我更新了代码以转换数据格式。此外,我更改了我的示例并保存了期望值。我预计解密后的值为158100。

代码语言:javascript
复制
import pandas as pd
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
import codecs
import base64

test_encrypted_value = 'SUXiDF6Dgtc8y3eY8Euqi/IYbSlQquLJAUKmZw=='
aes_iv = 'lMF2Jrruo9rR57Uy'
aes_key = '4E645267556B586E3272357538782F41'

byte_key = codecs.decode(aes_key, 'hex_codec')
base64_iv = base64.b64decode(aes_iv)
base64_encrypted_value = base64.b64decode(test_encrypted_value)

cipher = AES.new(byte_key, AES.MODE_GCM, base64_iv)
plaintext = cipher.decrypt(ciphertext)
print(plaintext.decode())

我现在得到以下错误

UnicodeDecodeError:'utf-8‘编解码器无法解码位置1中的字节0xb9 :无效的开始字节

就其价值而言,加密是通过在这里找到的snaplogic‘encryption’实现的- https://docs-snaplogic.atlassian.net/wiki/spaces/SD/pages/1438346/Encrypt+Field

我还使用128位和HEX选项set - https://www.allkeysgenerator.com/Random/Security-Encryption-Key-Generator.aspx在下面的链接生成AES密钥。

EN

回答 1

Stack Overflow用户

发布于 2022-11-19 06:53:12

您需要以字节格式传递数据。您的aes_ivtest_encrypted_value是base64格式,而aes_key是十六进制格式。为了使用它,您必须首先将这些转换为字节。

代码语言:javascript
复制
byte_key = codecs.decode(aes_key, 'hex_codec')
base64_iv = base64.b64decode(aes_iv)
base64_encrypted_value = base64.b64decode(test_encrypted_value)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74497776

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档