我正在尝试在将数据帧中的加密列发送给同事之前测试加密。
我尝试过:
load_dotenv()
secret_key = os.getenv('secret_key')
fernet_out = Fernet(secret_key)
def encrypt_data(field_value):
try:
return fernet_out.encrypt(field_value.encode())
except Exception as e:
return field_value
transactions['titre'] = transactions['titre'].apply(encrypt_data)
transactions['titre_origine'] = transactions['titre_origine'].apply(encrypt_data)
加密成功。这是输出的示例:
titre \
0 b'gAAAAABnCRr14wRSZ6GBKk0mC7IVRPJc_ZBBk-6-x1Pz...
1 b'gAAAAABnCRr1rBUy1XYbd96J2gu_uixDuHiiB3N2ahu_...
2 b'gAAAAABnCRr16CMlKRFwuU_qWQl_aYCrYrvyZck9xelh...
3 b'gAAAAABnCRr1AAdNLpy4Nwy70lJrO4f5r7QclFPmKqBa...
4 b'gAAAAABnCRr1xnOka06WgK4AcXkoj1SlZXRa3fSBTMjF...
... ...
708088 b'gAAAAABnCRs5AELW3LO6WEpERE2LvJGWoettvk6qlSML...
但我立即尝试使用相同的密钥进行解密,以确保我的同事可以解密。我试过:
secret_key = os.getenv('secret_key')
fernet_out = Fernet(secret_key)
def decrypt_field(field_value):
try:
return fernet_out.decrypt(field_value.encode()).decode()
except Exception as e:
return field_value
解密不成功。我得到相同的加密输出。
这是为什么呢?知道我生成了密钥。
谢谢您的帮助
加密的列被读取为字符串。我必须转换为咬合才能解决问题。
def decrypt_field(field_value):
'''
'''
try:
return fernet_out.decrypt(ast.literal_eval(field_value)).decode()
except Exception as e:
print(e)
return field_value
print(df['column'].apply(decrypt_field))
输出是它应该的样子。