python加密解密代码
python加密解密代码
Python的加密解密加密解密,说穿了就两件事:把明文变成看不懂的代码乱码,再把乱码变回明文。加密解密但这两件事背后,代码藏着完全不同的加密解密设计哲学。有人用hashlib做单向散列,代码有人用cryptography库做对称加密,加密解密还有人抱着base64当宝贝——那玩意儿根本不算加密,代码顶多是加密解密编码。
先看最常见的代码对称加密。AES算法是加密解密绝对的主角,cryptography库用起来像搭积木:
from cryptography.fernet import Fernet key = Fernet.generate_key() cipher = Fernet(key) encrypted = cipher.encrypt(b"secret data") decrypted = cipher.decrypt(encrypted) 这段代码干净利落,代码但有个坑——key得自己保存。加密解密丢了key,代码数据就永久锁死。加密解密我见过真实案例,有个小公司把key写进代码仓库,结果员工离职后数据被脱库,加密形同虚设。key管理比加密算法本身难十倍,这不是技术问题,是流程问题。
RSA非对称加密则是另一套逻辑。公钥随便发,私钥自己藏。用公钥加密的数据只有私钥能解,反过来私钥签名,公钥验证。Python里用rsa库实现:
import rsa (pubkey, privkey) = rsa.newkeys(512) message = "hello".encode() crypto = rsa.encrypt(message, pubkey) plain = rsa.decrypt(crypto, privkey) 512位密钥只是演示,实际生产至少2048位。速度慢得感人,所以真实场景中RSA常用来加密AES的密钥,混合加密才是王道。
再说哈希。md5和sha1已经被攻破,碰撞检测很容易制造。sha256目前还算安全,但哈希是单向的,你没法从摘要反推原文。很多人拿哈希当加密用,这是概念混淆。哈希用于校验完整性,比如下载文件后比对哈希值确认没被篡改。哈希不是加密,是数字指纹。
有个细节值得注意:Python的hashlib库计算哈希时,加盐(salt)是必须的。不加盐的哈希表,彩虹表一查就穿。加盐后同样的密码产生不同哈希值,安全性提升一个量级。
实际开发中,我强烈建议直接用cryptography库,别自己造轮子。网上那些几十行的"自定义加密算法",大多经不起推敲。加密这行,业余选手的创意往往是专业选手的笑话。库封装好了底层细节,还处理了填充、模式、初始化向量等容易出错的环节。
一个真实案例:某爬虫项目需要保存登录cookie,直接明文存数据库。后来被安全审计点名,改成Fernet加密存储。改动不到十行代码,但数据泄露风险从"裸奔"变成"穿了防弹衣"。代价是每次读写多了几毫秒延迟,可接受。
解密时最容易翻车的是编码问题。加密前的bytes和加密后的bytes长度不一致,有人直接转str导致UnicodeDecodeError。记住:加密操作永远用bytes,别用str。字符串先encode再加密,解密后decode回来。
最后说个反直觉的事:加密代码本身不难写,难的是密钥轮换、权限隔离、日志脱敏这些周边工程。Python的简洁语法让加密实现看起来很轻松,但生产环境的加密方案需要架构设计。别迷信"加密就安全"——如果攻击者能直接读内存,再强的算法也白搭。
写加密代码时,我习惯先问三个问题:数据在传输中还是静止时加密?谁有权访问密钥?密钥泄露了怎么撤销?想清楚这些,再动手写代码。技术选型反而是最简单的部分。