base6 python 字节_Python之Base64加解密
1
什么是Base64
Base64是一种基于64个可打印字符来表示二进制数据的表示方法。由于2^6=64,所以每6个比特为一个单元,对应某个可打印字符。
3个字节有24个比特,对应于4个Base64单元,即3个字节可由4个可打印字符来表示。在Base64中的可打印字符包括字母A-Z、a-z、数字0-9,这样共有62个字符,此外两个可打印符号在不同的系统中而不同。
Base64模块真正用得上的方法只有8个,分别是:
encode, decode, encodestring, decodestring, b64encode, b64decode, urlsafe_b64decode, urlsafe_b64encode。
它们8个可以两两分为4组:
encode,decode一组,专门用来编码和解码文件的,也可以对StringIO里的数据做编解码;
encodestring,decodestring一组,专门用来编码和解码字符串;
b64encode,b64decode一组,用来编码和解码字符串,并且有一个替换符号字符的功能。
这个功能是这样的:因为Base64编码后的字符除了英文字母和数字外还有三个字符' + / =',其中'='只是为了补全编码后的字符数为4的整数,而'+'和'/'在一些情况下需要被替换的,b64encode和b64decode正是提供了这样的功能。至于什么情况下'+'和'/'需要被替换,最常见的就是对url进行Base64编码的时候。
urlsafe_b64encode,urlsafe_b64decode 一组,这个就是用来专门对url进行Base64编解码的,实际上也是调用的前一组函数。
2
Base64有什么使用场景
Base64是一种任意二进制到文本字符串的编码方法,常用于在URL、Cookie、网页中传输少量二进制数据,包括MIME的电子邮件及XML的一些复杂数据。
3
base64转换过程
如下图所示:
Python标准库中提供了base64模块,用来进行转换,因使用到以下二组方法,故做如下说明:
base64.b64encode()将bytes类型数据进行base64编码,返回编码后的bytes类型
base64.b64deocde()将base64编码的bytes类型进行解码,返回解码后的bytes类型
decode的作用是将其他编码的字符串转换成unicode编码
encode的作用是将unicode编码转换成其他编码的字符串
4
工作中遇到的问题
使用curl 命令可以正常的返回,如下:
tony@l-l-server1.beta.op.tx1 ~ $ curl "http://10.7.37.9:9200/entity-prod-ars_ars-profile/_count?pretty" -u'ars_es_rw:LohZUiU9CIqh1oe4VP'{"count" : 61475690,"_shards" : {"total" : 5,"successful" : 5,"skipped" : 0,"failed" : 0}}
转换为Python的request请求时一直失败。如下图所示:
正确的处理应该是这样的:
def get_es_token():username="ars_es_rw"password="LohZUiU9CIqh1oe4VP"token=base64.b64encode("{}:{}".format(username, password).encode())headers = {'content-type': 'application/json',"Authorization":"Basic " + bytes.decode(token)}print(headers)url="http://10.7.37.9:9200/entity-prod-ars_ars-profile/_count?pretty"response = requests.request("POST", url, headers=headers)print(response.text)
备注:上面截图失败与下面成功的原因在于要使用bytes.decode方法将token bytes类型转换为str. 或写成:str(token,encoding=’utf8’)都可以。
简单解释下bytes是什么:bytes 只负责以字节序列的形式(二进制形式)来存储数据,至于这些数据到底表示什么内容(字符串、数字、图片、音频等),完全由程序的解析方式决定。如果采用合适的字符编码方式(字符集),字节串可以恢复成字符串;反之亦然,字符串也可以转换成字节串。
以下是网上查的示例:
# bytes objectb = b"example"# str objects = "example"# str to bytessb = bytes(s, encoding = "utf8")# bytes to strbs = str(b, encoding = "utf8")# an alternative method# str to bytessb2 = str.encode(s)# bytes to strbs2 = bytes.decode(b)
5
小技巧
可以看一下在Linux下的加密与解密字符串:
tony@l-l-server1.beta.op.tx1 ~ $ echo "ars_es_rw:LohZUiU9CIqh1oe4VP" | base64YXJzX2VzX3J3OkxvaFpVaVU5Q0lxaDFvZTRWUAo=tony@l-l-server1.beta.op.tx1 ~ $ echo "YXJzX2VzX3J3OkxvaFpVaVU5Q0lxaDFvZTRWUA==" | base64 -dars_es_rw:LohZUiU9CIqh1oe4VP
友情提示:“无量测试之道”原创著作,欢迎关注交流,禁止第三方不显示文章来源时转载。更多原创文章请扫码关注查看,合作请联系:loadkernel@126.com。
QQ技术交流群:41564936
如果你觉得文章不错的话,分享、收藏,在看,关注、打赏将会是对我的最大支持,也是我持续更新的最大动力。
base6 python 字节_Python之Base64加解密相关推荐
- base6 python 字节_Python使用base64模块进行二进制数据编码详解
前言 昨天团队的学妹来问关于POP3协议的问题,所以今天稍稍研究了下POP3协议的格式和Python里面的poplib.而POP服务器往回传的数据里有一部分需要用到Base64进行解码,所以就顺便看了 ...
- Flex中的Base64加解密
Flex中的Base64加解密 Flex sdk3就内置了Base64的加/解密工具类 分别是 mx.utils.Base64Encoder mx.utils.Base64Decoder Base64 ...
- java base64 加解密_java Base64加解密
import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; public class Base64Util { public stati ...
- linux下C++base64加解密与图片互转
最近由于工作需要,需要处理由http传来的base64图片数据,特此做下记录也希望能帮到更多的朋友. 部分内容参考Andy____Li 的blog: https://blog.csdn.net/m0_ ...
- Jmeter接口请求Base64加解密
jmeter 对报文进行Base64加解密心得. 业务需求是,对接口进行测试,但需要对报文进行加密,对返回的密文进行解密. 遇到的问题:接口传的报文字段,因为没有加密,所以 ...
- java实现加密———Base64加解密
java实现Base64加解密 @Testpublic void test01() throws Exception {String name = "LuWenMenHu";Str ...
- PB实现BASE64加解密
文章目录 实例 文本加解密 文件加解密 源代码 实例 文本加解密 1.加密文本:PB实现BASE64加解密 得到的密文为:UELlrp7njrBCQVNFNjTliqDop6Plr4Y= 2.解密文本 ...
- 【安全算法之base64】base64加解密的C语言源码实现
最近,有项目中需要用到base64的加解密,所以用C语言实现了一遍,测试效果还不错,代码量和RAM消耗都比较低,可以提供给大家参考下. #include <stdbool.h> #incl ...
- python之base64加解密
1.什么是Base64 Base64是一种基于64个可打印字符来表示二进制数据的表示方法.由于2^6=64,所以每6个比特为一个单元,对应某个可打印字符. 3个字节有24个比特,对应于4个Base64 ...
最新文章
- mybatis报错There is no getter for property named '***' in 'class ***'
- ubuntu 13.10 amd64安装ia32-libs
- 多线程(一、线程安全案例)
- boost::posix_time模块用时间构造和计算的一些简单例子
- JQuery动态创建Form
- html鼠标点击伪类,CSS伪类:CSS3鼠标滑过按钮动画
- Android之通过ContentResolver获取手机图片和视频的路径和生成缩略图和缩略图路径
- 面试要10K,HR说你只值7K,怎么斗得过?
- 常用 MQTT 客户端库简介
- libCef基本框架与结构
- Exchange 日常管理六之:创建邮箱数据库
- Enterprise Architect 15 使用指南 II
- c++11 std::decay源码剖析
- windows server 2008 R2 怎么集成USB3.0驱动
- 嵌入式linux编程开发必备知识
- css中indent是什么意思,css文本属性中的text-indent的解析
- 徐文长传奇李舟楫的博客新浪博客
- 大数据优化服务 黑科技创造价值 智慧旅游来势猛
- tf.meshgrid
- “在 System.Threading.ThreadAbortException 中第一次偶然出现的‘mscorlib.dll’类型的异常”的解决方法