通过使用 Python 解密表中的列来获得 InvalidToken

InvalidToken by decrypting Column in Table using Python

提问人:Susy84 提问时间:3/19/2023 最后编辑:Susy84 更新时间:3/20/2023 访问量:74

问:

有谁知道如何解决 InvalidToken 的问题?

密钥应该相同,但我仍然收到此无效令牌错误。

我附上了我的代码和假表的图像。

干杯!

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。但是,我收到了一个无效令牌错误。

python-3.x 加密 隐私 数据掩码

评论


答:

1赞 Topaco 3/19/2023 #1

f.encrypt(...)返回一个类似字节的对象。当使用字符串存储时,represenation 被存储,这可以在您的屏幕截图中看到。
加载此字符串时,将加载并导致导致解密失败。
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)

在此处输入图像描述

评论

0赞 Susy84 3/19/2023
感谢您的评论。它现在正在工作!下面我发布了一个问题,以防您想检查一下,否则谢谢。