百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分析 > 正文

Python之Base64加解密 Python之Base64加解密令

liebian365 2024-10-24 14:32 24 浏览 0 评论

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 object

b = b"example"

# str object

s = "example"

# str to bytes

sb = bytes(s, encoding = "utf8")

# bytes to str

bs = str(b, encoding = "utf8")

# an alternative method

# str to bytes

sb2 = str.encode(s)

# bytes to str

bs2 = bytes.decode(b)


5、小技巧

可以看一下在Linux下的加密与解密字符串:


tony@l-l-server1.beta.op.tx1 ~ $ echo "ars_es_rw:LohZUiU9CIqh1oe4VP" | base64 

YXJzX2VzX3J3OkxvaFpVaVU5Q0lxaDFvZTRWUAo=

 

tony@l-l-server1.beta.op.tx1 ~ $ echo "YXJzX2VzX3J3OkxvaFpVaVU5Q0lxaDFvZTRWUA==" | base64 -d

ars_es_rw:LohZUiU9CIqh1oe4VP

相关推荐

深度解密epoll 如何工作的?(epoll基本处理流程)

epoll...

大乐透第19082期:头奖开出7注1000万分落六地 奖池41亿元

2019年7月17日晚开奖的体彩超级大乐透第19082期开奖号码为:前区06、18、20、21、31,后区03、04。本期大乐透前区号码五区比为1:0:3:0:1,二区和四区号码没有给出。当期前区和值...

【开奖】4月27日周六:福彩、体彩(2021年4月27日体彩开奖结果)

4月27日开奖福彩3D第2019110期:61222选5第2019110期:0812202122排列3第19110期:303排列5第19110期:30305大乐透第19047期:0304...

“红狒狒”落户哈尔滨铁路局(哈尔滨铁路红肠)

这几天,“红人”“红狒狒”在牡丹江机务段可引起了不小的轰动,众粉丝争相与其拍照留念,在该段人气爆棚!“红狒狒”到底何许人也?“红狒狒”,中文名:和谐3D型电力机车;绰号:红狒狒、番茄;制造商:大连机...

2D、3D、2.5D,做游戏还是搞噱头?玩家都晕了

前言游戏类型就像某种潮流,一种流行罢,另一种接棒成为主流。前两年的新作大多以“开放世界”为标签,在追求纯沙盒的过程中打造出一些细致的分类,比如说“类GTA沙盒”。诚然,纯碎的沙盒游戏并不多见,业内只有...

《战神4》PC版宣传片发布 GTX 1070即可60帧畅玩

在今年10月的时候索尼PlayStation官方正式宣布圣莫尼卡2018年的《战神4》将于2022年1月14日推出PC版本,官方在今天公布了一段PC版宣传片,并且公开了游戏的配置需求。下面让我们一起来...

男星深情好丈夫形象崩塌,半夜搂美女坐大腿,举止亲密

近日,于晓光被拍到深夜在酒吧玩,结束后与一名女子一起上车离开。上车后,女子直接坐在了他腿上,他也顺势搂着美女,美女满脸笑容地坐在他腿上玩手机离开。可能有人会好奇,于晓光是谁呢?于晓光是韩国艺人秋瓷炫的...

d3d12dll丢失怎么修复?d3d12dll加载失败怎么解决?

  d3d12.dll丢失怎么修复?d3d12.dll加载失败怎么解决?很多朋友想要运行游戏的时候都会遇到这个问题,这种情况该怎么办呢?今天系统之家小编给朋友们讲讲具体的解决方法,操作其实还蛮简单的。...

许多玩家反馈《生化4RE》PC一直崩溃 无法进入游戏

今日(3月24日),卡普空《生化危机4:重制版》正式发售,然而有部分PC玩家遇到了游戏崩溃等问题。很多玩家在贴吧发帖称游戏遇到了严重的崩溃问题,且经常反复,报错代码普遍为FatalD3Derror...

微软正式推出适用于WSL Linux的D3D12 GPU视频加速技术

今天,微软正式向WindowsSubsystemforLinux(WSL)用户发布了Direct3D12GPU视频加速支持。在微软通过WSL允许在Linux下使用Open...

《怪物猎人:崛起》曙光系统报错“Fatal d3d error”的解决办法

《怪物猎人:崛起》曙光系统报错“Fatald3derror”的解决办法不少小伙伴反应《怪物猎人:崛起》DLC曙光预载以后打不开游戏,出现了Fatald3derror类似的错误代码,这类问题的解...

Mac+双屏,前端程序员的专业配置 - Loctek 乐歌 D3D 双屏电脑显示器支架

做FE也有一段日子了,电脑屏幕每天在设计稿、浏览器、IDE、即时通讯工具、Terminal、邮箱之间切换。虽然mac的工作区带来了很多灵活,但是依然略显不足。于是入手支架,把公司配的电脑和显示器发挥起...

RPC 的原理和简单使用(rpc详解)

RPC的概念RPC,RemoteProcedureCall,翻译成中文就是远程过程调用,是一种进程间通信方式。它允许程序调用另一个地址空间(通常是共享网络的另一台机器上)的过程或函数。在调用的...

大厂开源的golang微服务rpc框架 — kitex

提前rpc估计所有的开发同学都知道,不知道的也无所谓,毕竟我也好几年没用了,今天带大家在复习一下。RPC(RemoteProcedureCall):远程过程调用,...

干货!一文掌握Protobuf所有语言所有用法,快收藏

说实话,Protobuf这个库,让人相见时难别亦难,东风无力百花残,每次等到要用它的时候,总感觉还没有完全掌握它的用法,而实际上等去百度或者谷歌的时候,教程都是多么的凌乱不堪。学会它,最直接关系到的,...

取消回复欢迎 发表评论: