速通python加密之base64
Base64编码
Base64是一种基于64个可打印字符的编码方式,用于将二进制数据转换为文本格式,核心目的是解决二进制数据在传输或存储中可能出现的兼容性问题(如某些系统仅支持文本字符),并非加密算法(编码过程可逆,无安全性)。
核心特点:
-
编码原理
以6位二进制为一个单位(2⁶=64),对应64个预设字符(通常为A-Z、a-z、0-9、+
和/
,末尾可能用=
补位),将任意二进制数据(如图片、文件、字符串等)拆分为6位一组进行映射,最终生成纯文本字符串。 -
可逆性
编码过程可通过Base64解码完全还原原始数据(无信息丢失),因此仅用于数据转换,不具备加密功能。 -
数据膨胀
由于将3字节(24位)二进制数据编码为4个字符(4×6=24位),编码后的数据体积会增加约33%(如100KB的文件编码后约133KB)。
应用场景:
- 网络传输:在URL、Cookie、HTTP协议头中传输二进制数据(避免特殊字符导致解析错误),例如邮件附件编码、API接口中传输图片二进制数据。
- 数据存储:将二进制数据(如小图片)以文本形式嵌入HTML、CSS或JSON中。
- 简单数据转换:如在不支持二进制的环境中临时传递数据。
示例:
"""
@File :02base64.py
@Editor : 百年
"""
'''
加密或者解密的时候结果通通都是字节,密文是用来传输的,但是在http协议里传输字节
是一件很麻烦的工作,相对应的,如果传输的是字符串就好控制的多,此时base64应运而生
26个大写字母+26个小写字母+10个数字+2个特殊符号(+和/)组成了一组类似与64进制的计算逻辑
这就是base64'''
import base64
bs = "天空好像下雨".encode('utf-8')
print(bs) #首先整一个字符串转换成字节
# b'\xe5\xa4\xa9\xe7\xa9\xba\xe5\xa5\xbd\xe5\x83\x8f\xe4\xb8\x8b\xe9\x9b\xa8'
# important:把字节转换成base64编码的字节
print(base64.b64encode(bs))
# b'5aSp56m65aW95YOP5LiL6Zuo' 注意还是b打头,说明还是字节
print(base64.b64encode(bs).decode()) #tips:对b64的字节进行解码
# 5aSp56m65aW95YOP5LiL6Zuo"""
总结:杂乱的字节转换成base64字符串
base64.b64encode(bytes).decode()
将base64字符串还原成正常的字符串
base64.b64decode(b64str).encode()
"""#tips:将字符串进行b64编码成b64的字节然后再进行转码
b64s = base64.b64encode(bs).decode()
# 把b64字符串解码为b64的字节
print('要进行转换的数据',b64s)
# 要进行转换的数据 5aSp56m65aW95YOP5LiL6Zuo
print(base64.b64decode(b64s))
# b'\xe5\xa4\xa9\xe7\xa9\xba\xe5\xa5\xbd\xe5\x83\x8f\xe4\xb8\x8b\xe9\x9b\xa8'
print(len(base64.b64encode(bs)))
# important:注意base64编码的字节长度一定是4的倍数
#important:将b64的字节解码并'可以指定'解码的编码规则是utf-8
print(base64.b64decode(b64s).decode())
print(base64.b64decode(b64s).decode('utf-8'))
# 天空好像下雨
# 天空好像下雨