json 在Python中将字节字符串转换为字典

a64a0gku  于 2023-01-14  发布在  Python
关注(0)|答案(1)|浏览(187)

基本信息

我正在创建一个python脚本,它可以用以前的会话数据加密和解密文件。

问题所在

我可以解密我的文件并使用密钥读取它。这将返回一个bytes字符串,我可以将其转换为字符串。但是,这个字符串需要转换为字典,我不能这样做。使用ast,json和eval时,我遇到了错误。

字节字符串

decrypted = fernet.decrypt(encrypted)

字符串

string = decrypted.decode("UTF-8").replace("'", '"')

如果我使用eval()或ast.literal_eval(),我会得到以下错误:

然后我尝试使用json.loads(),并得到以下错误:

在两张图片上屏蔽的信息是为了保护我的SSH连接。在第一张图片中,它在我的IP地址的最后一位给了我一个语法错误。

功能

调用时负责此操作的函数如下所示:

def FileDecryption():
    with open('enc_key.key', 'rb') as filekey:
        key = filekey.read()
        filekey.close()

    fernet = Fernet(key)

    with open('saved_data.txt', 'rb') as enc_file:
        encrypted = enc_file.read()
        enc_file.close()

    decrypted = fernet.decrypt(encrypted)
    print(decrypted)

    string = decrypted.decode("UTF-8").replace("'", '"')

    data = f'{string}'

    print(data)

    #data = eval(data)
    data = json.loads(data)
    print(type(data))

    for key in data:
        #command_string = ["load", data[key][1], data[key][2], data[key][3], data[key][4]]
        #SSH.CreateSSH(command_string)
        print(key)

任何帮助都将不胜感激。谢谢!

1hdlvixo

1hdlvixo1#

您的数据似乎一开始就写错了,但没有完整的示例很难说。
下面是一个完整的示例,它往返于支持JSON的数据对象。

# requirement:
#   pip install cryptography
from cryptography.fernet import Fernet
import json

def encrypt(data, data_filename, key_filename):
    key = Fernet.generate_key()
    with open(key_filename, 'wb') as file:
        file.write(key)

    fernet = Fernet(key)
    encrypted = fernet.encrypt(json.dumps(data).encode())
    with open(data_filename, 'wb') as file:
        file.write(encrypted)

def decrypt(data_filename, key_filename):
    with open(key_filename, 'rb') as file:
        key = file.read()

    fernet = Fernet(key)
    with open(data_filename, 'rb') as file:
        return json.loads(fernet.decrypt(file.read()))

data = {'key1': 'value1', 'key2': 'value2'}
encrypt(data, 'saved_data.txt', 'enc_key.key')
decrypted = decrypt('saved_data.txt', 'enc_key.key')
print(decrypted)

输出:

{'key1': 'value1', 'key2': 'value2'}

相关问题