You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 19:17:30