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字符串的常用操作方法小结
May 21 Python
python获取当前用户的主目录路径方法(推荐)
Jan 12 Python
python版微信跳一跳游戏辅助
Jan 11 Python
Python之reload流程实例代码解析
Jan 29 Python
Python 实现一行输入多个值的方法
Apr 21 Python
python 脚本生成随机 字母 + 数字密码功能
May 26 Python
Python3 chardet模块查看编码格式的例子
Aug 14 Python
Python类和实例的属性机制原理详解
Mar 21 Python
python redis存入字典序列化存储教程
Jul 16 Python
关于Python 解决Python3.9 pandas.read_excel(‘xxx.xlsx‘)报错的问题
Nov 28 Python
termux中matplotlib无法显示中文问题的解决方法
Jan 11 Python
Pytorch实现图像识别之数字识别(附详细注释)
May 11 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
检查url链接是否已经有参数的php代码 添加 ? 或 &
2010/02/09 PHP
windows server 2008/2012安装php iis7 mysql环境搭建教程
2016/06/30 PHP
PHP封装的数据库保存session功能类
2016/07/11 PHP
iOS自定义提示弹出框实现类似UIAlertView的效果
2016/11/16 PHP
PHP封装的简单连接MongoDB类示例
2019/02/13 PHP
js修改table中Td的值(定义td的双击事件)
2013/01/10 Javascript
为JS扩展Array.prototype.indexOf引发的问题探讨及解决
2013/04/24 Javascript
js简易namespace管理器 实例代码
2013/06/21 Javascript
提取字符串中年月日的函数代码
2013/11/05 Javascript
Js参数值中含有单引号或双引号问题的解决方法
2013/11/06 Javascript
Jquery Ajax解析XML数据(同步及异步调用)简单实例
2014/02/12 Javascript
ReactNative页面跳转实例代码
2016/09/27 Javascript
详解jQuery事件
2017/01/13 Javascript
JS库中的Particles.js在vue上的运用案例分析
2017/09/13 Javascript
vue中的event bus非父子组件通信解析
2017/10/27 Javascript
AngularJS标签页tab选项卡切换功能经典实例详解
2018/05/16 Javascript
11个教程中不常被提及的JavaScript小技巧(推荐)
2019/04/17 Javascript
Vue页面手动刷新,实现导航栏激活项还原到初始状态
2020/08/06 Javascript
[51:53]完美世界DOTA2联赛循环赛 LBZS vs DM BO2第二场 11.01
2020/11/02 DOTA
python实现随机调用一个浏览器打开网页
2018/04/21 Python
python try except 捕获所有异常的实例
2018/10/18 Python
关于Django Models CharField 参数说明
2020/03/31 Python
Python3与fastdfs分布式文件系统如何实现交互
2020/06/23 Python
HTML5 Canvas 绘图——使用 Canvas 绘制图形图文教程 使用html5 canvas 绘制精美的图
2015/08/31 HTML / CSS
瑞贝卡·明可弗包包官网:Rebecca Minkoff
2016/07/21 全球购物
大学生大二自我鉴定
2013/10/28 职场文书
门卫岗位安全职责
2013/12/13 职场文书
招商业务员岗位职责
2013/12/16 职场文书
大专毕业自我鉴定
2014/02/04 职场文书
化验员岗位职责
2015/02/14 职场文书
公司聚餐通知
2015/04/22 职场文书
2015年信息宣传工作总结
2015/05/26 职场文书
小学班主任研修日志
2015/11/13 职场文书
MySQL8.0无法启动3534的解决方法
2021/06/03 MySQL
详解Redis复制原理
2021/06/04 Redis
面试分析分布式架构Redis热点key大Value解决方案
2022/03/13 Redis