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遍历C盘dll文件的方法
May 06 Python
Python 搭建Web站点之Web服务器网关接口
Nov 06 Python
PyCharm 常用快捷键和设置方法
Dec 20 Python
Python针对给定列表中元素进行翻转操作的方法分析
Apr 27 Python
python+opencv实现霍夫变换检测直线
Oct 23 Python
python将print输出的信息保留到日志文件中
Sep 27 Python
pandas 中对特征进行硬编码和onehot编码的实现
Dec 20 Python
python pprint模块中print()和pprint()两者的区别
Feb 10 Python
Python pandas 列转行操作详解(类似hive中explode方法)
May 18 Python
5款实用的python 工具推荐
Oct 13 Python
Python爬虫之Selenium下拉框处理的实现
Dec 04 Python
Django框架之路由用法
Jun 10 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结合飞信 免费天气预报短信
2009/05/07 PHP
php函数指定默认值方法的小例子
2013/12/04 PHP
php桥接模式应用案例分析
2019/10/23 PHP
PHP中isset、empty的用法与区别示例详解
2020/11/05 PHP
30个精美的jQuery幻灯片效果插件和教程
2011/08/23 Javascript
Uglifyjs(JS代码优化工具)入门 安装使用
2020/04/13 Javascript
推荐JavaScript实现继承的最佳方式
2014/11/11 Javascript
jQuery中size()方法用法实例
2014/12/27 Javascript
JS实现双击屏幕滚动效果代码
2015/10/28 Javascript
微信小程序图片选择、上传到服务器、预览(PHP)实现实例
2017/05/11 Javascript
利用C/C++编写node.js原生模块的方法教程
2017/07/07 Javascript
jQuery实现简单的计时器功能实例分析
2017/08/29 jQuery
JS扩展String.prototype.format字符串拼接的功能
2018/03/09 Javascript
vue中使用cookies和crypto-js实现记住密码和加密的方法
2018/10/18 Javascript
用webpack4开发小程序的实现方法
2019/06/04 Javascript
浅谈Vue3.0之前你必须知道的TypeScript实战技巧
2019/09/11 Javascript
vue使用recorder.js实现录音功能
2019/11/22 Javascript
Vue export import 导入导出的多种方式与区别介绍
2020/02/12 Javascript
js实现贪吃蛇游戏 canvas绘制地图
2020/09/09 Javascript
微信小程序接入vant Weapp组件的详细步骤
2020/10/28 Javascript
详解JavaScript原型与原型链
2020/11/16 Javascript
[52:15]2014 DOTA2国际邀请赛中国区预选赛5.21 HGT VS LGD-GAMING
2014/05/23 DOTA
[51:53]完美世界DOTA2联赛循环赛 LBZS vs DM BO2第二场 11.01
2020/11/02 DOTA
Pycharm学习教程(6) Pycharm作为Vim编辑器使用
2017/05/03 Python
Python+OpenCV人脸检测原理及示例详解
2020/10/19 Python
详解centos7+django+python3+mysql+阿里云部署项目全流程
2019/11/15 Python
Python爬虫:Request Payload和Form Data的简单区别说明
2020/04/30 Python
html5+css3进度条倒计时动画特效代码【推荐】
2016/03/08 HTML / CSS
有750多个顶级品牌的瑞士时尚在线:ABOUT YOU
2017/01/04 全球购物
澳大利亚家具和家居用品购物网站:Zanui
2018/12/29 全球购物
T3官网:头发造型工具
2019/12/26 全球购物
超市实习总结自我鉴定
2013/09/19 职场文书
护理助产毕业生的求职信
2014/03/02 职场文书
行政人事岗位职责
2014/03/17 职场文书
小学生演讲稿大全
2014/04/25 职场文书
母亲节感言
2015/08/03 职场文书