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字符串的encode与decode研究心得乱码问题解决方法
Mar 23 Python
python抓取网页中图片并保存到本地
Dec 01 Python
python与C互相调用的方法详解
Jul 14 Python
python爬取网易云音乐评论
Nov 16 Python
对Python3.x版本print函数左右对齐详解
Dec 22 Python
python取均匀不重复的随机数方式
Nov 27 Python
Python @property原理解析和用法实例
Feb 11 Python
Python脚本去除文件的只读性操作
Mar 05 Python
Python2.7:使用Pyhook模块监听鼠标键盘事件-获取坐标实例
Mar 14 Python
Matplotlib 折线图plot()所有用法详解
Jul 28 Python
python 发送邮件的四种方法汇总
Dec 02 Python
如何用python写个模板引擎
Jan 14 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
Smarty模板快速入门
2007/01/04 PHP
php 中文字符串首字母的获取函数分享
2013/11/04 PHP
一组PHP可逆加密解密算法实例代码
2014/01/21 PHP
php通过ajax实现双击table修改内容
2014/04/28 PHP
php中filter_input函数用法分析
2014/11/15 PHP
typecho插件编写教程(二):写一个新插件
2015/05/28 PHP
PHP验证码无法显示的原因及解决办法
2017/08/11 PHP
excel操作之Add Data to a Spreadsheet Cell
2007/06/12 Javascript
JavaScript 序列化对象实现代码
2009/12/18 Javascript
JQuery对checkbox操作 (循环获取)
2011/05/20 Javascript
利用angularjs1.4制作的简易滑动门效果
2017/02/28 Javascript
js 取消页面可以选中文字的功能方法
2018/01/02 Javascript
浅谈vue中.vue文件解析流程
2018/04/24 Javascript
VUEX采坑之路之获取不到$store的解决方法
2019/11/08 Javascript
Element Alert警告的具体使用方法
2020/07/27 Javascript
JavaScript实现瀑布流布局的3种方式
2020/12/27 Javascript
[02:36]DOTA2英雄基础教程 帕格纳
2014/01/20 DOTA
[01:55]TI9显影之尘系列 - Evil Geniuses
2019/08/22 DOTA
[59:48]DOTA2-DPC中国联赛 正赛 VG vs Magma BO3 第一场 1月26日
2021/03/11 DOTA
python 合并文件的具体实例
2013/08/08 Python
在Python的web框架中编写创建日志的程序的教程
2015/04/30 Python
Python基于socket实现简单的即时通讯功能示例
2018/01/16 Python
Python将一个CSV文件里的数据追加到另一个CSV文件的方法
2018/07/04 Python
Pandas之Dropna滤除缺失数据的实现方法
2019/06/25 Python
Pandas 重塑(stack)和轴向旋转(pivot)的实现
2019/07/22 Python
python opencv实现gif图片分解的示例代码
2019/12/13 Python
python3正则模块re的使用方法详解
2020/02/11 Python
pyspark 随机森林的实现
2020/04/24 Python
英国时尚服饰电商:Boohoo
2017/10/12 全球购物
什么是数组名
2012/05/10 面试题
一套英文Java笔试题面试题
2016/04/21 面试题
什么样的创业计划书可行性高?
2014/02/01 职场文书
基层党员群众路线整改措施及努力方向
2014/10/28 职场文书
开展警示教育活动总结
2015/05/09 职场文书
CSS浮动引起的高度塌陷问题
2022/08/05 HTML / CSS
Win10服务主机占用内存怎么办?Win10服务主机进程占用大量内存解决方法
2022/09/23 数码科技