当前位置: 首页 > news >正文

【Python编程-03】从零入门 Python 加密算法!含完整可运行代码 + 场景对比 + 避坑详解

前言

在网络安全和数据开发中,加密算法是保护数据隐私、防止信息泄露的核心技术。Python 凭借丰富的标准库和第三方库,能轻松实现各类加密需求。

本文将从编码、摘要、对称加密、非对称加密四个维度,手把手带你实现 Python 加密算法实战,代码可直接复制运行,适合新手入门和项目开发参考~

加密算法分类(通俗易懂版)

  1. 编码算法(Base64):非加密,仅数据格式转换,可逆,用于数据传输
  2. 摘要算法(MD5/SHA):单向加密,不可逆,用于校验数据完整性、密码存储
  3. 对称加密(AES):加密解密用同一密钥,速度快,适合大量数据加密
  4. 非对称加密(RSA):公钥加密、私钥解密,安全性高,适合小数据 / 密钥传输

一、环境准备

本文使用 Python 标准库 + 第三方库pycryptodome(加密神器,替代老旧的 pycrypto),安装命令:

pip install pycryptodome -i https://pypi.tuna.tsinghua.edu.cn/simple

二、实战代码(完整可运行)

1. Base64 编码 / 解码(数据传输)

适用场景:图片转码、接口参数传输、简单数据格式化

import base64 def base64_encode(data: str) -> str: """Base64 编码""" # 字符串转字节 -> 编码 -> 字节转字符串 encode_bytes = base64.b64encode(data.encode("utf-8")) return encode_bytes.decode("utf-8") def base64_decode(encode_data: str) -> str: """Base64 解码""" decode_bytes = base64.b64decode(encode_data) return decode_bytes.decode("utf-8") # 测试 if __name__ == '__main__': original_data = "CSDN加密实战:Python加密算法" print("原始数据:", original_data) encode_result = base64_encode(original_data) print("Base64编码:", encode_result) decode_result = base64_decode(encode_result) print("Base64解码:", decode_result)

2. MD5 摘要加密(不可逆,密码存储)

适用场景:用户密码存储、文件完整性校验、数据签名⚠️ 注意:MD5 是单向加密,无法解密,只能对比摘要值

import hashlib def md5_encrypt(data: str, salt: str = "csdn_encrypt_salt") -> str: """ MD5 加密(带盐值,提升安全性) :param data: 原始数据 :param salt: 盐值(防止彩虹表破解) :return: 32位MD5摘要 """ # 拼接数据+盐值,转字节 md5_obj = hashlib.md5((data + salt).encode("utf-8")) return md5_obj.hexdigest() # 测试 if __name__ == '__main__': pwd = "123456" print("原始密码:", pwd) print("MD5加密结果:", md5_encrypt(pwd))

3. AES 对称加密(主流加密,大量数据)

适用场景:文件加密、接口敏感数据加密、本地数据保护AES 支持 128/192/256 位密钥,本文用CBC 模式(最安全常用)

from Crypto.Cipher import AES from Crypto.Util.Padding import pad, unpad import base64 # AES 配置(密钥必须16/24/32位,偏移量16位) AES_KEY = "1234567890123456" # 16位密钥 AES_IV = "abcdefghijklmnop" # 16位偏移量 def aes_encrypt(data: str) -> str: """AES 加密""" cipher = AES.new( key=AES_KEY.encode("utf-8"), mode=AES.MODE_CBC, iv=AES_IV.encode("utf-8") ) # 填充数据(AES要求数据长度为16的倍数) padded_data = pad(data.encode("utf-8"), AES.block_size) encrypted_bytes = cipher.encrypt(padded_data) # 转Base64方便传输 return base64.b64encode(encrypted_bytes).decode("utf-8") def aes_decrypt(encrypt_data: str) -> str: """AES 解密""" cipher = AES.new( key=AES_KEY.encode("utf-8"), mode=AES.MODE_CBC, iv=AES_IV.encode("utf-8") ) encrypted_bytes = base64.b64decode(encrypt_data) decrypted_bytes = unpad(cipher.decrypt(encrypted_bytes), AES.block_size) return decrypted_bytes.decode("utf-8") # 测试 if __name__ == '__main__': data = "用户手机号:13800138000,身份证:110101199001011234" print("原始敏感数据:", data) aes_enc = aes_encrypt(data) print("AES加密结果:", aes_enc) aes_dec = aes_decrypt(aes_enc) print("AES解密结果:", aes_dec)

4. RSA 非对称加密(最高安全,密钥交换)

适用场景:支付接口、登录认证、对称密钥安全传输RSA 生成公钥(加密)+私钥(解密),一对密钥配套使用

from Crypto.PublicKey import RSA from Crypto.Cipher import PKCS1_v1_5 import base64 def generate_rsa_key(): """生成RSA公钥和私钥(保存到文件,只需生成一次)""" # 生成2048位密钥 rsa_key = RSA.generate(2048) # 私钥 private_key = rsa_key.export_key() with open("private_key.pem", "wb") as f: f.write(private_key) # 公钥 public_key = rsa_key.publickey().export_key() with open("public_key.pem", "wb") as f: f.write(public_key) print("RSA密钥生成完成!") def rsa_encrypt(data: str, public_key_path: str = "public_key.pem") -> str: """RSA 公钥加密""" with open(public_key_path, "rb") as f: public_key = RSA.import_key(f.read()) cipher = PKCS1_v1_5.new(public_key) encrypted_bytes = cipher.encrypt(data.encode("utf-8")) return base64.b64encode(encrypted_bytes).decode("utf-8") def rsa_decrypt(encrypt_data: str, private_key_path: str = "private_key.pem") -> str: """RSA 私钥解密""" with open(private_key_path, "rb") as f: private_key = RSA.import_key(f.read()) cipher = PKCS1_v1_5.new(private_key) encrypted_bytes = base64.b64decode(encrypt_data) decrypted_bytes = cipher.decrypt(encrypted_bytes, None) return decrypted_bytes.decode("utf-8") # 测试 if __name__ == '__main__': # 第一步:生成密钥(仅第一次运行) # generate_rsa_key() # 加密解密 data = "支付密码:666666" print("原始数据:", data) rsa_enc = rsa_encrypt(data) print("RSA加密结果:", rsa_enc) rsa_dec = rsa_decrypt(rsa_enc) print("RSA解密结果:", rsa_dec)

三、四大加密算法对比总结

表格

算法类型可逆性速度安全性适用场景
Base64可逆极快低(仅编码)数据传输、图片转码
MD5不可逆中(可加盐)密码存储、数据校验
AES可逆大量数据、文件加密
RSA可逆极高小数据、密钥交换、支付

四、开发建议

  1. 密码存储:必须用MD5/SHA256 + 盐值,绝对不要明文存储
  2. 业务数据加密:优先用AES(速度快),密钥单独管理
  3. 敏感接口:用RSA加密 AES 密钥,兼顾安全和效率
  4. Base64:不要当加密用,仅用于数据格式转换

五、总结

本文完整实现了 Python 中最常用的四大加密算法,代码简洁、注释清晰、可直接用于项目开发。

加密是网络安全的基础,掌握这些算法,能轻松应对日常开发中的数据保护需求。


Python开发环境搭建(Windows超详细)+ HelloWorld工程实例(新手零踩坑)

Python 文件操作实战:从入门到精通,一文学会打开 / 读取 / 修改文件

从零入门 Python 加密算法!含完整可运行代码 + 场景对比 + 避坑详解


如果觉得本文对你有帮助,欢迎点赞+收藏+关注,后续会持续更新Python新手实战教程,陪你从入门到精通!

日常深耕嵌入式、物联网、协议开发相关技术,有技术答疑、项目合作、毕设指导需求,均可私信私聊!


http://www.jsqmd.com/news/711936/

相关文章:

  • 【多线路故障】含sop的配电网故障重构研究(Matlab代码实现)
  • StitchFlow:基于AI的本地化UI原型生成工作流实践
  • 第十七届蓝桥杯省赛c++b组题解
  • 高通X105调制解调器:5G Advanced与6G关键技术解析
  • 如何用GHelper轻松掌控华硕笔记本性能:5分钟快速配置终极指南
  • 整个 AI 项目从本地 → 部署到服务器
  • 工业级Cat-1导轨式DTU USR-DR154/DR152(口红DTU)技术规范、核心优势与标准化应用场景白皮书
  • 被低估的 .NET 开源项目:AngleSharp,优雅的 HTML 解析神器
  • 10 分钟让网页颜值翻倍(底层+手写+AI提示词)
  • MySQL如何防止通过权限提升攻击_严格控制SUPER权限分配范围
  • 5分钟极速部署NVIDIA Riva ASR语音识别服务
  • YOLO26桥梁缺陷识别检测系统(项目源码+YOLO数据集+模型权重+UI界面+python+深度学习+远程环境部署)
  • 初步了解安卓逆向
  • 2026甘肃亮化工程权威TOP5排行:兰州亮化工程/兰州亮化设计/兰州体育场亮化/兰州体育场泛光照明/兰州商业综合体亮化/选择指南 - 优质品牌商家
  • NDCG@k:推荐系统排序质量评估的核心指标
  • 苹果MacBook Neo与保时捷968 Club Sport:如何让便宜产品变酷炫,成市场新宠?
  • 2026年合肥留学机构测评,最好的口碑好中介如何选 - 速递信息
  • 宜宾宅心装饰2026技术解析:口碑背后的工艺与服务细节 - 优质品牌商家
  • YOLO26电梯内电动车识别检测系统(项目源码+YOLO数据集+模型权重+UI界面+python+深度学习+远程环境部署)
  • Portarium:轻量级本地服务可视化管理的Go语言实现
  • 2026年武汉留学中介机构前十解析,哪家科研服务口碑最好 - 速递信息
  • 2026年3月回收运动木地板品牌推荐,二手运动体育木地板回收/回收运动木地板,回收运动木地板服务联系电话 - 品牌推荐师
  • AI编程助手技术对比与实战应用指南
  • RoPE频谱放大与Transformer位置编码优化实践
  • 5分钟上手!无需API权限的Instagram数据爬虫工具实战指南
  • ncmdump终极指南:3分钟掌握NCM格式解密,解锁网易云音乐播放自由
  • 中位数【C语言】
  • 实际生产开发到底怎么用锁?单体本地锁/数据库锁/Redis分布式锁 真实场景
  • 深入浅出 16.1 例题(二叉树)P4715 P4913
  • 2026年香港留学推荐,学员满意度高的中介机构全面测评 - 速递信息