InvalidToken,方法是使用Python解密表中的列

vmpqdwk3  于 2023-03-20  发布在  Python
关注(0)|答案(1)|浏览(150)

有人知道如何解决无效令牌的问题吗?
密钥应该是相同的,但我仍然得到这个无效的令牌错误。
我附上了我的代码和一张假table的照片。
干杯!

import pandas as pd
from cryptography.fernet import Fernet, InvalidToken

# Create an example dataframe
data = {'Name': ['Alice', 'Bob', 'Charlie'],
'Salary': [50000, 70000, 90000]}
df = pd.DataFrame(data)

# Generate a key for encryption
key = Fernet.generate_key()

# Create a Fernet object using the key
f = Fernet(key)

# Encrypt the 'Salary' column
df['Salary'] = df['Salary'].apply(lambda x: f.encrypt(str(x).encode()))

# Save the encrypted data to a CSV file
df.to_csv('encrypted_data.csv', index=False)

# Load the encrypted data from the CSV file
df = pd.read_csv('encrypted_data.csv')

# Decrypt the 'Salary' column
try:
  df['Salary'] = df['Salary'].apply(lambda x: int(f.decrypt(x.encode()).decode()))
except InvalidToken as e:
  print(f"Error: {e}")
  print(f"Key: {key}")
  raise

# Print the decrypted data
print(df)

我尝试了上面的代码,并期望解密列salary。但是,我得到了一个invalidtoken错误。

unftdfkk

unftdfkk1#

f.encrypt(...)返回一个类似字节的对象。当用to_csv()存储时,字符串表示存储为b'...',这可以在屏幕截图中看到。
使用read_csv()加载时,将加载此字符串,x.encode()将生成b"b'...'",从而导致解密失败。
为了避免这种情况,加密时必须对密文进行UTF-8解码:

df['Salary'] = df['Salary'].apply(lambda x: f.encrypt(str(x).encode()).decode())

然后解密工作,print(df)返回加密和解密的数据:

相关问题