问题描述
我正在使用盐变量进行 ferney 加密。 第一次生成后,将盐转换为字符串以存储在 JSON 文件中,然后我需要将其重新转换为字节以用于解密。
但在控制台中,这是我所拥有的:
encrypt key: b'eMA0pdSgH4Jz_dobdAL5QYdnCzJryze7gySHIx4V6Zw='
salt token: 1492684EDD7C538D23AFAB1AB179B67E
encrypt salt: b'\x14\x92hN\xdd|S\x8d#\xaf\xab\x1a\xb1y\xb6~'
decrypt key: b'sHH65A1nwJ0HB0j_K8ieFmMI2TNhk-CGeYxpB6VGCEo='
decrypt salt: b'1492684EDD7C538D23AFAB1AB179B67E'
密钥不一样,加解密的盐不一样。我认为这是盐编码/解码的问题,因为加密/解密盐不一样。
我哪里错了?
def encrypt_data(data_enc,discord_identifier,password):
password = password.encode()
with open('data/DB.json') as json_file:
data = json.load(json_file)
try:
temp = data[discord_identifier]
find = 1
except KeyError:
print("ID doesn't exist")
find = 0
if find == 1:
salt_token = data[discord_identifier][0]['salt']
salt = base64.b16decode(salt_token)
if find == 0:
salt = os.urandom(16)
salt_token = base64.b16encode(salt).decode('utf-8')
data[discord_identifier] = [
{
'salt': salt_token
}
]
json.dump(data,open('data/DB.json',"w"),indent = 4)
kdf = PBKDF2HMAC(
algorithm=hashes.SHA256(),length=32,salt=salt,iterations=100000,)
key = base64.urlsafe_b64encode(kdf.derive(password))
print('encrypt key: ',key)
print('salt token: ',salt_token)
print('encrypt salt: ',salt)
f = Fernet(key)
return f.encrypt(data_enc.encode())
这里是解密函数:
def decrypt_json(discord_identifier,password):
global API_key
global secret_key
global discord_id
global exchange
password = password.encode()
with open('data/DB.json') as json_file:
data = json.load(json_file)
try:
salt = bytes(data[discord_identifier][0]['salt'],encoding='utf8')
kdf = PBKDF2HMAC(
algorithm=hashes.SHA256(),)
key = base64.urlsafe_b64encode(kdf.derive(password))
print("decrypt key: ",key)
print('decrypt salt: ',salt)
f = Fernet(key)
API_key = bytes(data[discord_identifier][0]['api_key'],encoding='utf8')
print(API_key)
print(type(API_key))
API_key = f.decrypt(API_key)
#API_key = f.decrypt(bytes(data[discord_identifier][0]['api_key'],encoding='utf8'))
secret_key = f.decrypt(bytes(data[discord_identifier][0]['secret_key'],encoding='utf8'))
print(API_key)
print(secret_key)
except KeyError:
print("ID doesn't exist")
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)