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 相关文章推荐
Django框架中render_to_response()函数的使用方法
Jul 16 Python
python os用法总结
Jun 08 Python
python3爬虫之设计签名小程序
Jun 19 Python
解决Python3中的中文字符编码的问题
Jul 18 Python
Python实现正整数分解质因数操作示例
Aug 01 Python
Python Pywavelet 小波阈值实例
Jan 09 Python
Python实现自定义读写分离代码实例
Nov 16 Python
pyhton中__pycache__文件夹的产生与作用详解
Nov 24 Python
使用python写一个自动浏览文章的脚本实例
Dec 05 Python
在python3中实现更新界面
Feb 21 Python
总结Python使用过程中的bug
Jun 18 Python
Python实现归一化算法详情
Mar 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
阿拉伯的咖啡与水烟
2021/03/03 咖啡文化
php 删除无限级目录与文件代码共享
2008/11/22 PHP
基于swoole实现多人聊天室
2018/06/14 PHP
fromCharCode和charCodeAt 方法
2006/12/27 Javascript
javascript 实现父窗口引用弹出窗口的值的脚本
2007/08/07 Javascript
JavaScript 新手24条实用建议[TUTS+]
2009/06/21 Javascript
左右悬浮可分组的网站QQ在线客服代码(可谓经典)
2012/12/21 Javascript
Internet Explorer 11 浏览器介绍:别叫我IE
2014/09/28 Javascript
jQuery中:text选择器用法实例
2015/01/03 Javascript
Javascript基础教程之数据类型转换
2015/01/18 Javascript
用JavaScript来美化HTML的select标签的下拉列表效果
2015/11/17 Javascript
JS基于面向对象实现的选项卡效果示例
2016/12/20 Javascript
javascript中的深复制详解及实例分析
2016/12/29 Javascript
jQuery实现联动下拉列表查询框
2017/01/04 Javascript
JavaScript实现的贝塞尔曲线算法简单示例
2018/01/30 Javascript
vue使用监听实现全选反选功能
2018/07/06 Javascript
element vue validate验证名称重复 输入框与后台重复验证 特殊字符 字符长度 及注意事项小结【实例代码】
2018/11/20 Javascript
vue.js高德地图实现热点图代码实例
2019/04/18 Javascript
js cavans实现静态滚动弹幕
2020/05/21 Javascript
JavaScript装箱及拆箱boxing及unBoxing用法解析
2020/06/15 Javascript
Python中列表和元组的相关语句和方法讲解
2015/08/20 Python
Python使用pygame模块编写俄罗斯方块游戏的代码实例
2015/12/08 Python
python多线程socket编程之多客户端接入
2017/09/12 Python
Python控制Firefox方法总结
2019/06/03 Python
python子线程退出及线程退出控制的代码
2019/10/16 Python
matplotlib之pyplot模块坐标轴标签设置使用(xlabel()、ylabel())
2021/02/22 Python
宝塔面板出现“open_basedir restriction in effect. ”的解决方法
2021/03/14 PHP
CSS3 毛玻璃效果
2019/08/14 HTML / CSS
websocket+sockjs+stompjs详解及实例代码
2018/11/30 HTML / CSS
用HTML5制作一个简单的弹力球游戏
2015/05/12 HTML / CSS
商务会议邀请函
2014/01/09 职场文书
基层党组织建设整改方案
2014/09/16 职场文书
2016天猫双十一广告语
2016/01/28 职场文书
2019奶茶店创业计划书范本!
2019/07/15 职场文书
创作书写之导游词实用技巧分享(干货)
2019/12/20 职场文书
JavaScript 数组去重详解
2021/09/15 Javascript