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 23 Python
Python中使用Flask、MongoDB搭建简易图片服务器
Feb 04 Python
Python探索之ModelForm代码详解
Oct 26 Python
python 日志增量抓取实现方法
Apr 28 Python
django框架CSRF防护原理与用法分析
Jul 22 Python
python的命名规则知识点总结
Oct 04 Python
Python基于Hypothesis测试库生成测试数据
Apr 29 Python
python 日志模块 日志等级设置失效的解决方案
May 26 Python
Python使用itcaht库实现微信自动收发消息功能
Jul 13 Python
Python识别处理照片中的条形码
Nov 16 Python
Python的collections模块真的很好用
Mar 01 Python
Python实现批量自动整理文件
Mar 16 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开源建站平台小结
2010/04/22 PHP
解析func_num_args与func_get_args函数的使用
2013/06/24 PHP
在win7中搭建Linux+PHP 开发环境
2014/10/08 PHP
Sublime里直接运行PHP配置方法
2014/11/28 PHP
Zend Framework实现具有基本功能的留言本(附demo源码下载)
2016/03/22 PHP
PHP获取网页所有连接的方法(附demo源码下载)
2016/03/30 PHP
Array.prototype.slice 使用扩展
2010/06/09 Javascript
运行Node.js的IIS扩展iisnode安装配置笔记
2015/03/02 Javascript
对JavaScript的全文搜索实现相关度评分的功能的方法
2015/06/24 Javascript
jQuery实现简单下拉导航效果
2015/09/07 Javascript
javascript绘制漂亮的心型线效果完整实例
2016/02/02 Javascript
jquery获取复选框的值的简单实例
2016/05/26 Javascript
js数组操作方法总结(必看篇)
2016/11/22 Javascript
深入理解javascript的getTime()方法
2017/02/16 Javascript
微信小程序实现跟随菜单效果和循环嵌套加载数据
2017/11/21 Javascript
解决vue同一slot在组件中渲染多次的问题
2018/09/06 Javascript
值得收藏的八个常用的js正则表达式
2018/10/19 Javascript
详解vuex持久化插件解决浏览器刷新数据消失问题
2019/04/15 Javascript
详解vue项目中实现图片裁剪功能
2019/06/07 Javascript
对Layer UI 模块化的用法详解
2019/09/26 Javascript
vue+element table表格实现动态列筛选的示例代码
2021/01/14 Vue.js
Python实现扫描局域网活动ip(扫描在线电脑)
2015/04/28 Python
python实现读取命令行参数的方法
2015/05/22 Python
基于Python中capitalize()与title()的区别详解
2017/12/09 Python
对Python3中bytes和HexStr之间的转换详解
2018/12/04 Python
Python编程实现tail-n查看日志文件的方法
2019/07/08 Python
python中下标和切片的使用方法解析
2019/08/27 Python
tensorboard 可以显示graph,却不能显示scalar的解决方式
2020/02/15 Python
python和pywin32实现窗口查找、遍历和点击的示例代码
2020/04/01 Python
linux centos 7.x 安装 python3.x 替换 python2.x的过程解析
2020/12/14 Python
用JAVA实现一种排序,JAVA类实现序列化的方法(二种)
2014/04/23 面试题
党委书记岗位职责
2013/11/24 职场文书
计算机维护专业推荐信
2014/02/27 职场文书
企业投资意向书
2015/05/09 职场文书
旅行社计调工作总结
2015/08/12 职场文书
2016国庆节活动宣传语
2015/11/25 职场文书