如何对DataFrame的Student列执行可逆哈希并实现还原?
解决可还原的Student列加密需求
兄弟,先给你掰扯清楚核心问题:Python内置的hash()函数是单向不可逆的,它的设计目标是快速生成唯一标识,而非可还原的加密——这就是你没法把哈希值还原回原Student名称的根本原因。如果需要实现「加密生成类似哈希的字符串 + 解密还原原内容」的功能,你得用对称加密算法,这里推荐cryptography库的Fernet模块,安全、易上手,完全适配你的需求。
具体实现步骤
1. 先安装依赖库
打开终端执行:
pip install cryptography
2. 生成并保存加密密钥
Fernet需要一个密钥来进行加密和解密,这个密钥一定要妥善保存,丢了就再也没法解密数据了。
from cryptography.fernet import Fernet # 生成密钥(只需要生成一次,保存好) key = Fernet.generate_key() # 把密钥存到文件里(或者环境变量,别硬编码到代码里!) with open("student_key.key", "wb") as key_file: key_file.write(key)
3. 编写加密和解密函数
# 加载密钥(后续每次使用都要加载) def load_key(): return open("student_key.key", "rb").read() # 初始化加密器 fernet = Fernet(load_key()) # 加密函数 def encrypt_student(name): return fernet.encrypt(name.encode()).decode() # 解密函数 def decrypt_student(encrypted_name): return fernet.decrypt(encrypted_name.encode()).decode()
4. 对DataFrame进行加密和解密操作
假设你的DataFrame是df,现在可以替换原来的hash()操作:
import pandas as pd # 你的原始DataFrame(对应你提供的示例数据) df = pd.DataFrame({ "Student": ["Stud1", "Stud2", "Stud3", "Stud4", "Stud5", "Stud6", "Stud7", "Stud8", "Stud9"] }) # 加密Student列,生成Studendid列 df["Studendid"] = df["Student"].apply(encrypt_student) # 解密验证:把Studendid还原回原Student名称 df["Decrypted_Student"] = df["Studendid"].apply(decrypt_student)
执行完后,你的DataFrame会有三列:原Student、加密后的Studendid、解密还原的Decrypted_Student,可以看到解密后的内容和原内容完全一致。
关键提醒
- 密钥是核心:千万不要把密钥泄露给无关人员,也不要硬编码到代码仓库里,建议存在环境变量或者加密的配置文件中。
- 加密后的字符串是类似
gAAAAABk...这样的格式,和你示例里的哈希风格类似,但完全可逆。 - 如果你只是需要唯一标识而不需要还原,那
hash()没问题,但需要可逆的话,对称加密是唯一可行的方向。
内容的提问来源于stack exchange,提问作者user14540992
相关产品推荐
相关产品推荐

