Base64 加密

原理

这是一种比较广泛的加密方式,但也正因为它比较广泛所以容易被破解
经典的base64规则:
先对原串进行操作:3个字符放到一起(3*8=24个bit位),对这24个bit位分为4组,每组6个bit位,每组的前面再补2个0

例如原串:01001000 01001111 01001010
操作之后:00010010 00000100 00111101 00001010
总的来说长度会增加1/3
而且因为每个字符只有6位可能不为0,所以实际上有26=64种操作结果字符,所以叫base64

为了显示这64种,有如下编码表(仅序号,非真实二进制):
0—25对应A—Z
25—51对应a—z
52—61对应0—9
62对应+
63对应/

在末位,如果凑不够3个字符(24位),则补若干个全0字节
比如单个字母A,只有8位,就会被补全为:A的ascii,8个0,8个0
分组之后可能有的操作结果是全0,这种的对应=,这也是base64编码的特点,结尾因为补0有时会产生一个或两个=

例如:
A的ascii是65,所以当单个A转换时:
01000001 00000000 00000000
转换:00010000 00010000 00000000 00000000
发现最后两个都是=


python3的实现

python的标准库提供了base64,只要import base64即可
比较常用的有

base64.b64encode([bytes])
base64.urlsafe_b64encode([bytes])

第二个和第一个的区别是,因为base64中会产生/,+这两种url中会转义的字符,所以在url使用中先将/,+转化为下划线与短杠,接收者做相反操作,从而可以在url中安全传输

在python3中,str默认编码是unicode,并不能直接传入bytes,所以在加密前需要先转码(否则报错a bytes-like object is required, not 'str'

import base64
a=input()
print(base64.b64encode(a.encode('utf-8')))#先转bytes再加密

这样即可,utf-8的转码将str转为了bytes

输出的结果是b’密文’,说明结果是bytes型的,可以强制转换成str从而去掉b

import base64
a=input()
b=base64.b64encode(a.encode('utf-8'))#b是一个bytes类型
c=str(b,"utf-8")#转换为str
print(c)

解密过程是decode

base64.b64decode([bytes, bytearray, memoryview, str])
base64.urlsafe_b64decode([bytes, bytearray, memoryview, str])

和加密的区别是可以直接填入str类型,所以密文不一定要先转化为bytes
但返回值仍然是bytes

import base64
a=input()
print(base64.b64decode(a))

解密过程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值