修改解密的 JSON 代码并写入加密的消息 Python
Modifying a decrypted JSON code and writing the encrypted message Python
我正在尝试对下面的 sample.json
文件进行对称解密。 key
是可以解密 json 文件的密码。我解密下面的消息,然后把解密后的消息decrypted_data
变成字典,把BTCUSD
符号替换成ETHUSD
到RSI
文件夹。然后我将它加密回原来的 bytes
格式,并将新加密的代码写回 json 文件,但它不起作用。我在重新加密 encrypted
和写入 json 部分时遇到问题。我该如何解决?
from cryptography.fernet import Fernet
key = bytes(b'OKdXZnSshhlEZ6w44b0I366BZN5mb5sZQRHp5-UsCfo=')
filename = 'sample.json'
def decrypt(key, filename):
"""
Given a filename (str) and key (bytes), it decrypts the file and write it
"""
keyval = Fernet(key)
with open(filename, "rb") as f:
# read the encrypted data
encrypted_data = f.read()
# decrypt data
decrypted_data= json.loads(keyval.decrypt(encrypted_data).decode("utf-8"))
decrypted_data['RSI'][0]['TradingPair'] = 'ETHUSD'
encrypted= json.loads(keyval.encrypt(decrypted_data).encode("utf-8"))
#this writes your new, encrypted data into a new JSON file
with open(filename,'wb') as f:
f.write(encrypted)
decrypt(key, filename)
加密的Json文件:
gAAAAABhHBuLjIIKNHOLC2PcTHUhzbLM20XavWaQZjRK0oIwWOhni_LOogN6emtbpfPCNPx1TrZJv4Op0BnqTq_Xl-TXCPdSl7_83HEuyRfBEh_VX5zLA1AS9fEocO4_CB7OYeC2Id_PuxZBreaPlzGuHi0uDwIhnYSigVUIPWRa4g9Dp4_rSHSQJxNIbr_VqwUIBP1ComtMieU1prsSib_L2y-5xZqxh7gDAWGRekKEZefiuk3BNhboiEW_0oDYph3bpCV305t8O4-cHLer91ebme7XCfC75H_w7yyylR5QHf0MPVrJUt8fkuRd1vU7hsLD3x16KViCepZnE5YFjA6vXrsRJsciPccAg5rXLJi7qz-jnfZCCJI=
解密Json文件
{
"RSI": [
{
"TradingPair": "BTCUSD",
"Status": "ACTIVE"
}
],
"MOM_RSI":[
{
"TradingPair": "BTCUSDT",
"Status": "ACTIVE"
}
]
}
我很惊讶你没有看到错误,如果你是 运行 你分享的代码,因为我在网上得到一个 encrypted= json.loads(keyval.encrypt(decrypted_data).encode("utf-8"))
查看该行,它有一些问题。 keyval.encrypt
需要字节,但您给它的是 dict
。 json.loads
returns a dict
但您正在寻找要写入文件的字节。
我认为这行应该是:
encrypted = keyval.encrypt(json.dumps(decrypted_data).encode("utf-8"))
json.dumps
将转换为 str
,str
将由 encode
转换为 bytes
。然后你可以把它写入文件。
我正在尝试对下面的 sample.json
文件进行对称解密。 key
是可以解密 json 文件的密码。我解密下面的消息,然后把解密后的消息decrypted_data
变成字典,把BTCUSD
符号替换成ETHUSD
到RSI
文件夹。然后我将它加密回原来的 bytes
格式,并将新加密的代码写回 json 文件,但它不起作用。我在重新加密 encrypted
和写入 json 部分时遇到问题。我该如何解决?
from cryptography.fernet import Fernet
key = bytes(b'OKdXZnSshhlEZ6w44b0I366BZN5mb5sZQRHp5-UsCfo=')
filename = 'sample.json'
def decrypt(key, filename):
"""
Given a filename (str) and key (bytes), it decrypts the file and write it
"""
keyval = Fernet(key)
with open(filename, "rb") as f:
# read the encrypted data
encrypted_data = f.read()
# decrypt data
decrypted_data= json.loads(keyval.decrypt(encrypted_data).decode("utf-8"))
decrypted_data['RSI'][0]['TradingPair'] = 'ETHUSD'
encrypted= json.loads(keyval.encrypt(decrypted_data).encode("utf-8"))
#this writes your new, encrypted data into a new JSON file
with open(filename,'wb') as f:
f.write(encrypted)
decrypt(key, filename)
加密的Json文件:
gAAAAABhHBuLjIIKNHOLC2PcTHUhzbLM20XavWaQZjRK0oIwWOhni_LOogN6emtbpfPCNPx1TrZJv4Op0BnqTq_Xl-TXCPdSl7_83HEuyRfBEh_VX5zLA1AS9fEocO4_CB7OYeC2Id_PuxZBreaPlzGuHi0uDwIhnYSigVUIPWRa4g9Dp4_rSHSQJxNIbr_VqwUIBP1ComtMieU1prsSib_L2y-5xZqxh7gDAWGRekKEZefiuk3BNhboiEW_0oDYph3bpCV305t8O4-cHLer91ebme7XCfC75H_w7yyylR5QHf0MPVrJUt8fkuRd1vU7hsLD3x16KViCepZnE5YFjA6vXrsRJsciPccAg5rXLJi7qz-jnfZCCJI=
解密Json文件
{
"RSI": [
{
"TradingPair": "BTCUSD",
"Status": "ACTIVE"
}
],
"MOM_RSI":[
{
"TradingPair": "BTCUSDT",
"Status": "ACTIVE"
}
]
}
我很惊讶你没有看到错误,如果你是 运行 你分享的代码,因为我在网上得到一个 encrypted= json.loads(keyval.encrypt(decrypted_data).encode("utf-8"))
查看该行,它有一些问题。 keyval.encrypt
需要字节,但您给它的是 dict
。 json.loads
returns a dict
但您正在寻找要写入文件的字节。
我认为这行应该是:
encrypted = keyval.encrypt(json.dumps(decrypted_data).encode("utf-8"))
json.dumps
将转换为 str
,str
将由 encode
转换为 bytes
。然后你可以把它写入文件。