我对加密/解密很陌生,但我有敏感数据,需要作为加密数据存储。我们的ETL有一个内置的加密过程,它输出以下内容
{
"data":{
"transformation":"AES/GCM/noPadding",
"iv":"jlemHiOD8uiyMsqY",
"type":"JSON",
"ciphertext":"TOtsmTYG1jKCZXewFNPBk5xWf+q4AO8OSZPoYw==",
"key_params":{
"symmetric":{
"key_algorithm":"AES"
}
}
}
}从这里开始,当我需要使用数据时,我想使用pycryptodome来解密数据。我试图运行下面的python脚本来解密,但是遇到了一些错误。我认为这与数据的格式化方式有关吗?
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。
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密钥。
发布于 2022-11-19 06:53:12
您需要以字节格式传递数据。您的aes_iv和test_encrypted_value是base64格式,而aes_key是十六进制格式。为了使用它,您必须首先将这些转换为字节。
byte_key = codecs.decode(aes_key, 'hex_codec')
base64_iv = base64.b64decode(aes_iv)
base64_encrypted_value = base64.b64decode(test_encrypted_value)https://stackoverflow.com/questions/74497776
复制相似问题