当前位置: 首页 > news >正文

速通python加密之base64

Base64编码

Base64是一种基于64个可打印字符的编码方式,用于将二进制数据转换为文本格式,核心目的是解决二进制数据在传输或存储中可能出现的兼容性问题(如某些系统仅支持文本字符),并非加密算法(编码过程可逆,无安全性)。

核心特点:

  1. 编码原理
    以6位二进制为一个单位(2⁶=64),对应64个预设字符(通常为A-Z、a-z、0-9、+/,末尾可能用=补位),将任意二进制数据(如图片、文件、字符串等)拆分为6位一组进行映射,最终生成纯文本字符串。

  2. 可逆性
    编码过程可通过Base64解码完全还原原始数据(无信息丢失),因此仅用于数据转换,不具备加密功能。

  3. 数据膨胀
    由于将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'))
# 天空好像下雨
# 天空好像下雨
http://www.dtcms.com/a/300206.html

相关文章:

  • 《C++》模板详解
  • odoo代码分析(二)
  • 一键实现推送服务:Docker部署ntfy开源通知系统指南
  • STM32-定时器的基本定时/计数功能实现配置教程(寄存器版)
  • 数据结构习题--删除排序数组中的重复项
  • Linux内核设计与实现 - 第13章 虚拟文件系统(VFS)
  • TCP如何解决网络切换问题
  • Flutter开发实战之原生平台集成
  • FROM stakater/java8-alpine 构建cocker镜像
  • React入门学习——指北指南(第三节)
  • 【星野AI】minimax非活动时间充值优惠漏洞
  • 数据存储:OLAP vs OLTP
  • java基础(day16)set-map
  • 从0到1学Pandas(七):Pandas 在机器学习中的应用
  • AI Agent开发学习系列 - langchain之LCEL(5):如何创建一个Agent?
  • React入门学习——指北指南(第五节)
  • java集合框架面试点(2)
  • [2025CVPR-图象合成、生成方向]ODA-GAN:由弱监督学习辅助的正交解耦比对GAN 虚拟免疫组织化学染色
  • 《每日AI-人工智能-编程日报》--2025年7月26日
  • 四大主流AI Agent框架选型梳理
  • 零基础学习性能测试第三章:jmeter性能组件应用(事件,并发,定时器)
  • DriverManager在rt.jar里,凭什么能加载到classpath下的驱动?
  • CPA战略-4.1-公司战略与组织结构
  • 人形机器人_双足行走动力学:弹性势能存储和步态能量回收
  • 聚类里面的一些相关概念介绍阐述
  • 杰理蓝牙耳机开发--三轴加速度传感器与IIC通信
  • Python:PyAutoGUI模拟鼠标移动点击事件,程序运行后,如何获取鼠标控制权了?
  • Redis的数据淘汰策略是什么?有哪些?
  • 昇思学习营-【模型开发与适配】学习心得_20250724
  • window上建立git远程仓库