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


Posted in Python onNovember 06, 2020

1.base64

Python内置的base64模块可以实现base64、base32、base16、base85、urlsafe_base64的编码解码,python 3.x通常输入输出都是二进制形式,2.x可以是字符串形式。

base64模块的base64编码、解码调用了binascii模块,binascii模块中的b2a_base64()函数用于base64编码,binascii模块中的a2b_base64()函数用于base64解码。

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

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

2.md5

Python2.x中有md5模块,此模块调用了hashlib模块,python3.x已中将md5取掉,直接通过调用hashlib模块来进行md5。Python2.x可以直接使用unicode字符,但3.x中必须使用二进制字节串。

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

注意:每调用一次update(s),相当于给md5对象m增加了s。对一个新的需md5加密的内容,需要新建一个md5对象。

Hashlib模块还可以进行sha1、sha224、sha256、sha384、sha512等hash算法。Sha384、sha512在32位的平台上处理较慢。

3.crc32

计算指定内容的crc32校验值,可以用zlib以及binascii模块的crc32函数.

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

>>> binascii.crc32(s)
3035098857

4.crypt

crypt 模块(只用于 Unix/Linux,windows平台上没有此模块)实现了单向的 DES 加密, Unix/Linx系统使用这个加密算法来储存密码,这个模块真正也就只在检查这样的密码时有用。

>>> 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'

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

第三方Crypto包提供了较全面的加密算法,包括Cipher、Hash、Protocol、PublicKey、Singature、Util几个子模块,其中Cipher模块中有常用的AES、DES加密算法,Hash模块中有MD5、MD4、SHA等算法。下面介绍AES及DES的加密解密算法,python版本为2.7.9。

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
 解密后的值为: 我是明文

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 相关文章推荐
Python多进程机制实例详解
Jul 02 Python
Python编程实现的图片识别功能示例
Aug 03 Python
Python数据结构与算法之图的基本实现及迭代器实例详解
Dec 12 Python
Python爬虫_城市公交、地铁站点和线路数据采集实例
Jan 10 Python
对python中的 os.mkdir和os.mkdirs详解
Oct 16 Python
Python采集猫眼两万条数据 对《无名之辈》影评进行分析
Dec 05 Python
pytorch在fintune时将sequential中的层输出方法,以vgg为例
Aug 20 Python
python配置文件写入过程详解
Oct 19 Python
Python程序暂停的正常处理方法
Nov 07 Python
如何在python开发工具PyCharm中搭建QtPy环境(教程详解)
Feb 04 Python
如何解决cmd运行python提示不是内部命令
Jul 01 Python
详解python程序中的多任务
Sep 16 Python
基于Python模拟浏览器发送http请求
Nov 06 #Python
python如何写个俄罗斯方块
Nov 06 #Python
基于Python实现全自动下载抖音视频
Nov 06 #Python
Python3读写ini配置文件的示例
Nov 06 #Python
Python Serial串口基本操作(收发数据)
Nov 06 #Python
python基于exchange函数发送邮件过程详解
Nov 06 #Python
Python Unittest原理及基本使用方法
Nov 06 #Python
You might like
PHP的ASP防火墙
2006/10/09 PHP
在IIS7.0下面配置PHP 5.3.2运行环境的方法
2010/04/13 PHP
php之curl实现http与https请求的方法
2014/10/21 PHP
WordPress中编写自定义存储字段的相关PHP函数解析
2015/12/25 PHP
thinkphp3.2.0 setInc方法 源码全面解析
2018/01/29 PHP
Laravel框架实现简单的学生信息管理平台案例
2019/05/07 PHP
很酷的javascript loading效果代码
2008/06/18 Javascript
javascript prototype 原型链
2009/03/12 Javascript
js判断变量初始化的三种形式及推荐用的形式
2014/07/22 Javascript
innerHTML属性,outerHTML属性,textContent属性,innerText属性区别详解
2015/03/13 Javascript
iframe里使用JavaScript控制主页转向的方法
2015/04/03 Javascript
jQuery实现的倒计时效果实例小结
2016/04/16 Javascript
Bootstrap滚动监听(Scrollspy)插件详解
2016/04/26 Javascript
AngularJS上拉加载问题解决方法
2016/05/23 Javascript
Reactjs实现通用分页组件的实例代码
2017/01/19 Javascript
js实现水平滚动菜单导航
2017/07/21 Javascript
Vue头像处理方案小结
2018/07/26 Javascript
vue+element-ui动态生成多级表头的方法
2018/08/28 Javascript
Vue中对拿到的数据进行A-Z排序的实例
2018/09/25 Javascript
配置node服务器并且链接微信公众号接口配置步骤详解
2019/06/21 Javascript
关于JS模块化的知识点分享
2019/10/16 Javascript
jquery轻量级数字动画插件countUp.js使用详解
2019/10/17 jQuery
python多进程操作实例
2014/11/21 Python
Python里disconnect UDP套接字的方法
2015/04/23 Python
基于python yield机制的异步操作同步化编程模型
2016/03/18 Python
pandas 数据实现行间计算的方法
2018/06/08 Python
利用pandas将numpy数组导出生成excel的实例
2018/06/14 Python
Django多数据库配置及逆向生成model教程
2020/03/28 Python
python根据完整路径获得盘名/路径名/文件名/文件扩展名的方法
2020/04/22 Python
python 视频下载神器(you-get)的具体使用
2021/01/06 Python
学习党章思想汇报
2014/01/07 职场文书
创业计划书的写作技巧及要点
2014/01/31 职场文书
工作求职自荐信
2014/06/13 职场文书
购房协议书范本
2014/10/02 职场文书
2015年学生资助工作总结
2015/05/25 职场文书
Windows Server 2022 超融合部署(图文教程)
2022/06/25 Servers