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加解密相关推荐

  1. base6 python 字节_Python使用base64模块进行二进制数据编码详解

    前言 昨天团队的学妹来问关于POP3协议的问题,所以今天稍稍研究了下POP3协议的格式和Python里面的poplib.而POP服务器往回传的数据里有一部分需要用到Base64进行解码,所以就顺便看了 ...

  2. Flex中的Base64加解密

    Flex中的Base64加解密 Flex sdk3就内置了Base64的加/解密工具类 分别是 mx.utils.Base64Encoder mx.utils.Base64Decoder Base64 ...

  3. java base64 加解密_java Base64加解密

    import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; public class Base64Util { public stati ...

  4. linux下C++base64加解密与图片互转

    最近由于工作需要,需要处理由http传来的base64图片数据,特此做下记录也希望能帮到更多的朋友. 部分内容参考Andy____Li 的blog: https://blog.csdn.net/m0_ ...

  5. Jmeter接口请求Base64加解密

    jmeter 对报文进行Base64加解密心得.        业务需求是,对接口进行测试,但需要对报文进行加密,对返回的密文进行解密.        遇到的问题:接口传的报文字段,因为没有加密,所以 ...

  6. java实现加密———Base64加解密

    java实现Base64加解密 @Testpublic void test01() throws Exception {String name = "LuWenMenHu";Str ...

  7. PB实现BASE64加解密

    文章目录 实例 文本加解密 文件加解密 源代码 实例 文本加解密 1.加密文本:PB实现BASE64加解密 得到的密文为:UELlrp7njrBCQVNFNjTliqDop6Plr4Y= 2.解密文本 ...

  8. 【安全算法之base64】base64加解密的C语言源码实现

    最近,有项目中需要用到base64的加解密,所以用C语言实现了一遍,测试效果还不错,代码量和RAM消耗都比较低,可以提供给大家参考下. #include <stdbool.h> #incl ...

  9. python之base64加解密

    1.什么是Base64 Base64是一种基于64个可打印字符来表示二进制数据的表示方法.由于2^6=64,所以每6个比特为一个单元,对应某个可打印字符. 3个字节有24个比特,对应于4个Base64 ...

最新文章

  1. mybatis报错There is no getter for property named '***' in 'class ***'
  2. ubuntu 13.10 amd64安装ia32-libs
  3. 多线程(一、线程安全案例)
  4. boost::posix_time模块用时间构造和计算的一些简单例子
  5. JQuery动态创建Form
  6. html鼠标点击伪类,CSS伪类:CSS3鼠标滑过按钮动画
  7. Android之通过ContentResolver获取手机图片和视频的路径和生成缩略图和缩略图路径
  8. 面试要10K,HR说你只值7K,怎么斗得过?
  9. 常用 MQTT 客户端库简介
  10. libCef基本框架与结构
  11. Exchange 日常管理六之:创建邮箱数据库
  12. Enterprise Architect 15 使用指南 II
  13. c++11 std::decay源码剖析
  14. windows server 2008 R2 怎么集成USB3.0驱动
  15. 嵌入式linux编程开发必备知识
  16. css中indent是什么意思,css文本属性中的text-indent的解析
  17. 徐文长传奇李舟楫的博客新浪博客
  18. 大数据优化服务 黑科技创造价值 智慧旅游来势猛
  19. tf.meshgrid
  20. “在 System.Threading.ThreadAbortException 中第一次偶然出现的‘mscorlib.dll’类型的异常”的解决方法

热门文章

  1. 《渡月桥 ~君想ふ~》
  2. mac程序坞 全屏时偶尔无法自动隐藏的bug
  3. 深度学习在嵌入式设备上的应用
  4. 知识蒸馏综述:网络结构搜索应用
  5. 三年级下册分数计算机题,三年级下册数学卷子题
  6. ThinkPad适不适合计算机专业,工作也可以毫不费力 什么牌子的电脑好
  7. PyG文档之一:安装
  8. 股份制银行的薪资对比
  9. 剑指offer-矩阵中的路径
  10. 牛客寒假算法基础集训营6 I wzoi