news 2026/6/10 16:16:13

Python 实现常用的数据编码和对称加密

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python 实现常用的数据编码和对称加密

相信很多使用 python 的小伙伴在工作中都遇到过,对数据进行相关编码或加密的需求,今天这篇文章主要给大家介绍对于一些常用的数据编码和数据加密的方式,如何使用 python 去实现。话不多说,接下来直接进入主题:

1、base64 编码

什么是 Base64 编码?
Base64 就是一种基于 64 个可打印字符来表示二进制数据的方法

在 python 中对数据进行 base64 编码可以使用 base64 这个官方库

案例:
import base64 data= "musen" # base编码 data = data.encode() res = base64.b64encode(data) print(res) # base64解码 res2 = base64.b64decode(res) print(res2)

2、常见的哈希算法:

hash算法有很多:比如MD4、MD5、SHA-1 , SHA-224, SHA-256, SHA-384 和 SHA-5等等。其中MD5是比较常见的一种,也称之为MD5加密。

什么是 MD5 加密?
MD5(Message Digest Algorithm 5),是一种哈希算法,是不可逆的,即通过 md5 加密之后没办法得到原文,没有解密算法

python 中有一个叫做 hashlib 的官方库,对于一些常见的哈希算法这个库都实现了,咱们在工作中如果要使用 MD5 加密,直接使用 hashlib 这个库就可以实现。

案例
from hashlib import md5 def encrypt_md5(data): """md5加密""" # 创建md5对象 new_md5 = md5() new_md5.update(data.encode('utf-8')) res = new_md5.hexdigest() # 加密 return res

3、DES 加密

什么是对称加密?
对称加密指的的加密和解密用同一个秘钥进行加解密的加密方式。

什么是 EDS 加密?
des 对称加密,是一种比较传统的加密方式,其加密运算、解密运算使用的是同样的密钥,信息的发送者和信息的接收者在进行信息的传输与处理时 , 必须共同持相同的密码。

在 python 中有一个叫做 pyDes 的第三方库可以用来实现 DES 加密,使用之前需要先通过 pip 命令安装:pip install pyDes

案例:
from pyDes import des, CBC, PAD_PKCS5 import binascii def des_encrypt(s, KEY): secret_key = KEY iv = secret_key k = des(secret_key, CBC, iv, pad=None, padmode=PAD_PKCS5) en = k.encrypt(s, padmode=PAD_PKCS5) return binascii.b2a_hex(en).decode() def des_descrypt(s, KEY): secret_key = KEY iv = secret_key k = des(secret_key, CBC, iv, pad=None, padmode=PAD_PKCS5) de = k.decrypt(binascii.a2b_hex(s), padmode=PAD_PKCS5) return de.decode() if __name__ == '__main__': # 秘钥 KEY = 'mHAxsLtt' # 加密 res = des_encrypt("python666", KEY) print(res) # 解密 res2 = des_descrypt(res, KEY) print(res2)

4、3DES 加密

什么是 3DES 加密?
3DES(或称为 Triple DES)是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)块密码的通称。它相当于是对每个数据块应用三次 DES 加密算法

python 中实现 3DES 加密可以使用,pyDes 这个模块去实现

案例:
import base64 import hashlib import pyDes def encrypt_3des(data): key = "U8NjHq1ZP10=" hash_md5 = hashlib.md5() hash_md5.update(key.encode(encoding='UTF-8')) key = hash_md5.hexdigest() iv = key[0:8] key2 = key[0:24] k = pyDes.triple_des(key2, pyDes.CBC, IV=iv, pad=None, padmode=pyDes.PAD_PKCS5) d = k.encrypt(data.encode()) d = base64.b64encode(d) return d.decode() def descrypt_3des(data): key = "U8NjHq1ZP10=" hash_md5 = hashlib.md5() hash_md5.update(key.encode(encoding='UTF-8')) key = hash_md5.hexdigest() iv = key[0:8] key2 = key[0:24] k = pyDes.triple_des(key2, pyDes.CBC, IV=iv, pad=None, padmode=pyDes.PAD_PKCS5) data = base64.b64decode(data) d = k.decrypt(data) return d.decode() if __name__ == '__main__': res = encrypt_3des('lemonban') print(res) res2 = descrypt_3des(res) print(res2)

5、AES 加密

什么是 AES 加密?
AES 也是一种对称加密。它是用来替代之前的 DES 的,安全性更高。目前已经被多方分析且广为全世界所使用,并在 2002 年 5 月 26 日成为有效的标准 ,

关于 python 中实现 Aes 加密的库很多,大家可以去 pypi 上自行下载安装,下面案例用的是 Crypto 这个库

案例
import base64 from Crypto.Cipher import AES class AesEncrypt: # 密钥 key = '0CoJUm6Qyw8W8jud' # 偏移量 vi = '0102030405060708' def encrypt(self, data): """加密""" data = data.encode('utf8') data = (lambda s: s + (16 - len(s) % 16) * chr(16 - len(s) % 16).encode('utf-8'))(data) cipher = AES.new(self.key.encode('utf8'), AES.MODE_CBC, self.vi.encode('utf8')) encryptedbytes = cipher.encrypt(data) encodestrs = base64.b64encode(encryptedbytes) enctext = encodestrs.decode('utf8') return enctext def decrypt(self, data): """解密""" data = data.encode('utf8') encodebytes = base64.decodebytes(data) cipher = AES.new(self.key.encode('utf8'), AES.MODE_CBC, self.vi.encode('utf8')) text_decrypted = cipher.decrypt(encodebytes) unpad = lambda s: s[0:-s[-1]] text_decrypted = unpad(text_decrypted) text_decrypted = text_decrypted.decode('utf8') return text_decrypted if __name__ == '__main__': # 注意点:加密数据中有中文的时候,会有问题 data = "musen123" aes = AesEncrypt() # 加密 enctext = aes.encrypt(data) print(enctext) # # 解密 text_decrypted = aes.decrypt(enctext) print(text_decrypted)

最后作为一位过来人也是希望大家少走一些弯路,在这里我给大家分享一些软件测试的学习资料和我花了3个月整理的软件测试自学全栈,这些资料希望能给你前进的路上带来帮助。

视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 14:43:56

50、Windows Forms 控件详解

Windows Forms 控件详解 1. 引言 在 Windows 应用程序开发中,各种控件的使用至关重要,它们能为用户提供直观的交互界面。下面将详细介绍多种 Windows Forms 控件的特性和用途。 2. GroupBox 控件 GroupBox 控件用于将其他控件进行分组,形成一个独立的区域。其主要属性如…

作者头像 李华
网站建设 2026/6/10 14:29:24

Open-AutoGLM功能详解(工业级AI自动化的终极武器)

第一章:Open-AutoGLM功能概述Open-AutoGLM 是一款面向自动化自然语言处理任务的开源框架,专为大语言模型(LLM)的快速集成与智能流程编排而设计。它通过模块化架构支持任务自动分解、上下文感知推理以及多模型协同调度,…

作者头像 李华
网站建设 2026/6/10 15:05:56

利用anything-llm构建法律文书查询系统的可行性分析

利用 anything-LLM 构建法律文书查询系统的可行性分析 在律所的某个深夜,一位年轻律师正焦头烂额地翻找《劳动合同法》中关于试用期的规定,而他的电脑里躺着上百份PDF、Word和扫描件。这种场景在法律行业中并不罕见——信息密度高、文本结构复杂、更新频…

作者头像 李华
网站建设 2026/6/9 7:45:14

数据错位危机:当2TB数据库遭遇对齐错误

数据错位危机:当2TB数据库遭遇对齐错误引言:数字世界的多米诺骨牌凌晨三点,数据中心警报骤然响起。监控大屏上,一行刺眼的红色警告不断闪烁:“数据库对齐错误 - 关键数据错位检测”。在接下来的四小时里,技…

作者头像 李华
网站建设 2026/6/10 15:06:59

告别信息过载!用Anything-LLM管理你的知识资产

告别信息过载!用Anything-LLM管理你的知识资产 在信息爆炸的时代,我们每天被淹没在文档、邮件、报告和网页中。一个工程师要查三个月前的会议纪要,一位研究员需要从上百篇PDF里找出某个实验数据,企业员工面对不断更新的内部制度感…

作者头像 李华
网站建设 2026/6/9 0:58:20

加州数据中心用水透明度法案遭州长否决

加州数据中心用水透明度法案遭州长否决 加州州长加文纽森否决了一项要求数据中心披露其用水量的立法,尽管他本人正倡导努力应对该州的水资源短缺挑战。 第93号议会法案本将要求数据中心运营商在获取营业执照前向供水供应商提供预期用水量的估算,并在续期…

作者头像 李华