Python中的盐密钥加密解密编码

问题描述

我正在使用盐变量进行 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 (将#修改为@)