python中base64加密解密方法实例分析


Posted in Python onMay 16, 2015

本文实例讲述了python中base64加密解密方法。分享给大家供大家参考。具体分析如下:

一、base64

Base64是一种基于64个可打印字符来表示二进制数据的表示方法。由于2的6次方等于64,所以每6个比特为一个单元,对应某个可打印字符。三个字节有24个比特,对应于4个Base64单元,即3个字节需要用4个可打印字符来表示。它可用来作为电子邮件的传输编码。在Base64中的可打印字符包括字母A-Z、a-z、数字0-9 ,这样共有62个字符,此外两个可打印符号在不同的系统中而不同。编码后的数据比原始数据略长,为原来的4/3。

Base64常用于在通常处理文本数据的场合,表示、传输、存储一些二进制数据(或不可打印的字符串)。包括MIME的email,email via MIME, 在XML中存储复杂数据.

在邮件中的用途:

在MIME格式的电子邮件中,base64可以用来将binary的字节序列数据编码成ASCII字符序列构成的文本。使用时,在传输编码方式中指定base64。使用的字符包括大小写字母各26个,加上10个数字,和加号“+”,斜杠“/”,一共64个字符,等号“=”用来作为后缀用途。

在URL中的用途:

标准的Base64并不适合直接放在URL里传输,因为URL编码器会把标准Base64中的“/”和“+”字符变为形如“%XX”的形式,而这些“%”号在存入数据库时还需要再进行转换,因为ANSI SQL中已将“%”号用作通配符。

为解决此问题,可采用一种用于URL的改进Base64编码,它不在末尾填充'='号,并将标准Base64中的“+”和“/”分别改成了“*”和“-”,这样就免去了在URL编解码和数据库存储时所要作的转换,避免了编码信息长度在此过程中的增加,并统一了数据库、表单等处对象标识符的格式。

另有一种用于正则表达式的改进Base64变种,它将“+”和“/”改成了“!”和“-”,因为“+”,“*”在正则表达式中都可能具有特殊含义。

二、python中使用

C:\Python27>python
Python 2.7.2 (default, Jun 12 2011, 14:24:46) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import base64
>>> str = 'haha'
>>> base64.b64encode(str)
'aGFoYQ=='
>>> base64.b64decode('aGFoYQ==')
'haha'

三、其他的方法,这个比较重要

base64.b64encode(s[, altchars])
base64.b64decode(s[, altchars])
altchars为可选的参数,用来替换+和/的一个两个长度的字符串。
base64.urlsafe_b64encode(s)
base64.urlsafe_b64decode(s)

此方法中用-代替了+,用_代替了/ ,这样可以保证编码后的字符串放在url里可以正常访问

base64.b32encode(s)
base64.b32decode(s[, casefold[, map01]])
base64.b16encode(s)
base64.b16decode(s[, casefold])

希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
python迭代器的使用方法实例
Nov 21 Python
Python编程实战之Oracle数据库操作示例
Jun 21 Python
Django csrf 验证问题的实现
Oct 09 Python
使用Py2Exe for Python3创建自己的exe程序示例
Oct 31 Python
使用Python进行目录的对比方法
Nov 01 Python
基于torch.where和布尔索引的速度比较
Jan 02 Python
Pytorch 定义MyDatasets实现多通道分别输入不同数据方式
Jan 15 Python
Python线程协作threading.Condition实现过程解析
Mar 12 Python
Pycharm修改python路径过程图解
May 22 Python
浅谈python锁与死锁问题
Aug 14 Python
anaconda升级sklearn版本的实现方法
Feb 22 Python
Python实现文本文件拆分写入到多个文本文件的方法
Apr 18 Python
python中threading超线程用法实例分析
May 16 #Python
python实现合并两个数组的方法
May 16 #Python
python简单实现基数排序算法
May 16 #Python
Python使用cx_Oracle模块将oracle中数据导出到csv文件的方法
May 16 #Python
python中循环语句while用法实例
May 16 #Python
pymongo实现多结果进行多列排序的方法
May 16 #Python
python使用线程封装的一个简单定时器类实例
May 16 #Python
You might like
PHP中error_reporting()函数的用法(修改PHP屏蔽错误)
2011/07/01 PHP
PHP将HTML转换成文本的实现代码
2015/01/21 PHP
Zend Framework入门应用实例详解
2016/12/11 PHP
php批量删除操作代码分享
2017/02/26 PHP
thinkphp 验证码 的使用小结
2017/05/07 PHP
利用php操作memcache缓存的基础方法示例
2017/08/02 PHP
js getBoundingClientRect() 来获取页面元素的位置
2010/11/25 Javascript
JavaScript实现网页上的浮动广告的简单方法
2013/06/14 Javascript
js调用后台、后台调用前台等方法总结
2014/04/17 Javascript
setinterval()与clearInterval()JS函数的调用方法
2015/01/21 Javascript
xtemplate node.js 的使用方法实例解析
2016/08/22 Javascript
ztree简介_动力节点Java学院整理
2017/07/19 Javascript
jquery动态添加带有样式的HTML标签元素方法
2018/02/24 jQuery
jQuery中$原理实例分析
2018/08/13 jQuery
vue2.0结合Element-ui实战案例
2019/03/06 Javascript
layui实现左侧菜单点击右侧内容区显示
2019/07/26 Javascript
Vue-CLI 项目在pycharm中配置方法
2019/08/30 Javascript
微信小程序 行的删除和增加操作实现详解
2019/09/29 Javascript
Vue2.X和Vue3.0数据响应原理变化的区别
2019/11/07 Javascript
Vue filter 过滤器、以及在table中的使用介绍
2020/09/07 Javascript
python基础教程之python消息摘要算法使用示例
2014/02/10 Python
栈和队列数据结构的基本概念及其相关的Python实现
2015/08/24 Python
Python中.py文件打包成exe可执行文件详解
2017/03/22 Python
django项目运行因中文而乱码报错的几种情况解决
2017/11/07 Python
详解如何将python3.6软件的py文件打包成exe程序
2018/10/09 Python
python元组和字典的内建函数实例详解
2019/10/22 Python
简单介绍一下pyinstaller打包以及安全性的实现
2020/06/02 Python
Selenium alert 弹窗处理的示例代码
2020/08/06 Python
你的自行车健身专家:FaFit24
2016/11/16 全球购物
Java基础面试题
2014/07/19 面试题
企业文明单位申报材料
2014/05/16 职场文书
Python异常类型以及处理方法汇总
2021/06/05 Python
探讨Java中的深浅拷贝问题
2021/06/26 Java/Android
10大幻兽系恶魔果实 蝙蝠果实上榜,第一自愈能力强
2022/03/18 日漫
Java实战之课程信息管理系统的实现
2022/04/01 Java/Android
Java死锁的排查
2022/05/11 Java/Android