使用 Fernet 在同一个 Python 脚本中加密和解密

问题描述 投票:0回答:1

我正在尝试在将数据帧中的加密列发送给同事之前测试加密。

我尝试过:

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  

解密不成功。我得到相同的加密输出。

这是为什么呢?知道我生成了密钥。

谢谢您的帮助

python-3.x pandas dataframe encryption fernet
1个回答
0
投票

加密的列被读取为字符串。我必须转换为咬合才能解决问题。

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))

输出是它应该的样子。

© www.soinside.com 2019 - 2024. All rights reserved.