Python常用base64 md5 aes des crc32加密解密方法汇总

巷口听风
巷口听风
发布时间:2026-10-14 | 2人浏览过
原创

本文汇总Python中常用的加密解密技术,涵盖内置模块与第三方库的使用。详细解析Base64、MD5、CRC32及Crypt模块的原理与代码示例,并深入讲解利用PyCrypto库实现AES和DES3加密解密的具体步骤、参数配置及注意事项,适用于Python 2.x与3.x环境。

Base64编码与解码基础

1.base64

Python内置的base64模块支持base64、base32、base16、base85以及urlsafe_base64等多种编码与解码操作。在Python 3.x版本中,输入和输出通常要求为二进制格式;而在Python 2.x版本中,则允许使用字符串格式。

base64模块的编码和解码功能底层调用了binascii模块。具体而言,binascii模块中的b2a_base64()函数负责执行base64编码,而a2b_base64()函数则用于执行base64解码。


>>>import base64
>>> s = 'hello,word!'
>>> base64.b64encode(bytes(s,'ascii'))  #base64编码,编码的字符串必须是二进制形式的
b'aGVsbG8sd29yZCE='

>>> base64.b64decode(b'aGVsbG8sd29yZCE=')  #base64解码
b'hello,word!'

MD5哈希算法应用

2.md5

在Python 2.x版本中,存在独立的md5模块,该模块内部调用了hashlib模块。到了Python 3.x版本,独立的md5模块已被移除,用户需直接调用hashlib模块来执行MD5操作。此外,Python 2.x允许直接使用unicode字符,但Python 3.x强制要求使用二进制字节串进行MD5计算。


>>> import hashlib
>>> m = hashlib.md5()
>>> m.update(b'hello,word!')
>>> m.hexdigest()
'9702d6722a0901398efd4ecb3a20423f'

需要注意的是,每次调用update(s)方法,都是向现有的MD5对象m追加内容s。因此,若需对新的待加密内容进行MD5处理,必须重新实例化一个新的MD5对象。

Hashlib模块不仅支持MD5,还提供sha1、sha224、sha256、sha384以及sha512等多种哈希算法。其中,sha384和sha512在32位平台上的处理速度相对较慢。

CRC32校验值计算

3.crc32

计算指定内容的CRC32校验值,可以通过zlib模块或binascii模块提供的crc32函数来实现。


>>> import zlib
>>> import binascii
s = b'hello,word!'
>>> zlib.crc32(s)
3035098857

>>> binascii.crc32(s)
3035098857

Crypt模块与DES加密

4.crypt

Crypt模块仅适用于Unix/Linux系统,Windows平台不支持此模块。它实现了单向的DES加密算法,Unix/Linux系统利用该算法存储密码。因此,该模块主要应用于验证此类密码的场景。


>>> import crypt
>>> import random
>>> import string
>>> chars = string.digits + string.letters
>>> chars
'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
>>> def getsalt(chars):
...   return random.choice(chars) + random.choice(chars)
...
>>> salt = getsalt(chars)
>>> salt
'sb'
>>> msg = crypt.crypt('hello,world!',salt)
>>> msg
'sb0xvR6UbZsqw'

PyCrypto库高级加密实战

5.利用pycrypto包进行AES、DES、MD5等加密

第三方Crypto包提供了较为全面的加密算法支持,包含Cipher、Hash、Protocol、PublicKey、Signature和Util等多个子模块。其中,Cipher模块涵盖了常用的AES和DES加密算法,Hash模块则包含MD5、MD4、SHA等算法。下文将介绍AES及DES的加密解密算法,示例基于Python 2.7.9版本。

AES加密解密示例

5.1 AES加密解密


# coding=utf-8

from Crypto.Cipher import AES
from Crypto import Random
import binascii

key = '1234567890!@#$%^'  #秘钥,必须是16、24或32字节长度
iv = Random.new().read(16) #随机向量,必须是16字节长度

cipher1 = AES.new(key,AES.MODE_CFB,iv) #密文生成器,MODE_CFB为加密模式

encrypt_msg = iv + cipher1.encrypt('我是明文') #附加上iv值是为了在解密时找到在加密时用到的随机iv
print '加密后的值为:',binascii.b2a_hex(encrypt_msg)  #将二进制密文转换为16机制显示


cipher2 = AES.new(key,AES.MODE_CFB,iv) #解密时必须重新创建新的密文生成器
decrypt_msg = cipher2.decrypt(encrypt_msg[16:]) #后十六位是真正的密文
print '解密后的值为:',decrypt_msg.decode('utf-8')

运行后的结果为:

>>> ================================ RESTART ================================ >>> 加密后的值为: 502d279e1cba9ef6744ad4ce5a12dbf9389c99731bfab1349e35b528 解密后的值为: 我是明文

DES3加密解密示例

5.2 DES3加密解密


# coding=utf-8

from Crypto.Cipher import DES3
from Crypto import Random
import binascii

key = '1234567890!@#$%^'
iv = Random.new().read(8) #iv值必须是8位
cipher1 = DES3.new(key,DES3.MODE_OFB,iv) #密文生成器,采用MODE_OFB加密模式
encrypt_msg = iv + cipher1.encrypt('我是明文必须是八')
#附加上iv值是为了在解密时找到在加密时用到的随机iv,加密的密文必须是八字节的整数倍,最后部分
#不足八字节的,需要补位
print '加密后的值为:',binascii.b2a_hex(encrypt_msg)  #将二进制密文转换为16进制显示
cipher2 = DES3.new(key,DES3.MODE_OFB,iv) #解密时必须重新创建新的密文生成器
decrypt_msg = cipher2.decrypt(encrypt_msg[8:]) #后八位是真正的密文
print '解密后的值为:',decrypt_msg

运行后的结果为:

>>> ================================ RESTART ================================ >>> 加密后的值为: 8caf464c66ec652e5305d33ff4814a3a4f8423b404ae6a48f4a1c411ecddf932 解密后的值为: 我是明文必须是八

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表