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使用htpasswd实现基本认证授权的例子
Jun 10 Python
Python中的exec、eval使用实例
Sep 23 Python
合并百度影音的离线数据( with python 2.3)
Aug 04 Python
详解python中的Turtle函数库
Nov 19 Python
pygame游戏之旅 添加游戏界面按键图形
Nov 20 Python
在python中将字符串转为json对象并取值的方法
Dec 31 Python
Python实现DDos攻击实例详解
Feb 02 Python
Django项目中添加ldap登陆认证功能的实现
Apr 04 Python
Python列表删除元素del、pop()和remove()的区别小结
Sep 11 Python
记一次pyinstaller打包pygame项目为exe的过程(带图片)
Mar 02 Python
python3的pip路径在哪
Jun 23 Python
Python request中文乱码问题解决方案
Sep 17 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
destoon文章模块调用企业会员资料的方法
2014/08/22 PHP
简介WordPress中用于获取首页和站点链接的PHP函数
2015/12/17 PHP
PHP使用strtotime获取上个月、下个月、本月的日期
2015/12/30 PHP
WordPress开发中用于获取近期文章的PHP函数使用解析
2016/01/05 PHP
使用swoole 定时器变更超时未支付订单状态的解决方案
2019/07/24 PHP
vue页面加载闪烁问题的解决方法
2018/03/28 Javascript
详解使用Next.js构建服务端渲染应用
2018/07/10 Javascript
vue鼠标悬停事件实例详解
2019/04/01 Javascript
微信小程序canvas截取任意形状的实现代码
2020/01/13 Javascript
解决vue-photo-preview 异步图片放大失效的问题
2020/07/29 Javascript
[55:03]LGD vs EG 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
python实现图片批量剪切示例
2014/03/25 Python
Python smallseg分词用法实例分析
2015/05/28 Python
Python ldap实现登录实例代码
2016/09/30 Python
Python实现曲线点抽稀算法的示例
2017/10/12 Python
python实现猜数字小游戏
2020/03/24 Python
python实现多层感知器MLP(基于双月数据集)
2019/01/18 Python
Python 通过监听端口实现唯一脚本运行方式
2020/05/05 Python
基于CentOS搭建Python Django环境过程解析
2020/08/24 Python
详解WebSocket跨域问题解决
2018/08/06 HTML / CSS
凯特方迪化妆品官网:Kat Von D Beauty
2016/11/15 全球购物
德国汉莎航空中国官网: Lufthansa中国
2017/03/30 全球购物
美国知名奢侈美容品牌零售商:Cos Bar
2017/04/21 全球购物
掌上明珠Java程序员面试总结
2016/02/23 面试题
信用社实习人员自我鉴定
2013/09/20 职场文书
结婚典礼证婚词
2014/01/08 职场文书
酒店中秋节促销方案
2014/01/30 职场文书
《毛主席在花山》教学反思
2014/04/20 职场文书
文明演讲稿范文
2014/05/12 职场文书
新郎父亲婚礼致辞
2015/07/27 职场文书
幼儿园心得体会范文
2016/01/21 职场文书
Python标准库之typing的用法(类型标注)
2021/06/02 Python
JavaScript 原型与原型链详情
2021/11/02 Javascript
Windows 11要来了?微软文档揭示Win11太阳谷 / Win10有两个不同版本
2021/11/21 数码科技
python文件与路径操作神器 pathlib
2022/04/01 Python
如何用H5实现好玩的2048小游戏
2022/07/23 HTML / CSS