base64编码原理及简单Python实现

python编写base64加解密脚本(可变换码表) python编写base64加解密脚本(可变换码表) 嘻嘻 阅读详情

廖老师的Python3教程中对base64编码的讲解讲得不是很清楚,我经过搜索和询问研究生同学,把一些有用的资料结合起来了,希望对你们有用。

一、产生原因及作用

用记事本打开exe、jpg、pdf这些文件时,我们都会看到一大堆乱码,因为二进制文件包含很多无法显示和打印的字符,所以,如果要让记事本这样的文本处理软件能处理二进制数据,就需要一个二进制到字符串的转换方法。Base64是一种最常见的二进制编码方法。
base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,用来将非ASCII字符的数据转换成ASCII字符的一种方法,因为某些系统中只能使用ASCII字符,比如Email,由于历史原因,Email只被允许传送ASCII字符,即一个8位字节的低7位。因此,如果您发送了一封带有非ASCII字符(即字节的最高位是1)的Email通过有“历史问题”的网关时就可能会出现问题。网关可能会把最高位置为0!很明显,问题就这样产生了!基于以上的一些主要原因产生了Base64编码,它要求把每3个8Bit的字节转换为4个6Bit的字节,对数据内容进行编码来适合传输。虽然base64编码过后原文也变成不能看到的字符格式,但是这种方式很初级,很简单。Base64编码可用于在HTTP环境下传递较长的标识信息,编码的数据不会被人用肉眼所直接看到,适用于小段内容的编码,比如数字证书签名、Cookie的内容等。

二、编码原理

Base64编码表由64个字符组成,编码后的字符由表中字符组合而成,流程如下:
1. base64的编码都是按字符串长度,以每3个8bit的字符为一组。
2. 然后针对每组,首先获取每个字符的ASCII编码。
3. 然后将ASCII编码转换成8bit的二进制,得到一组3*8=24bit的字节。
4. 然后再将这24bit划分为4个6bit的字节,并在每个6bit的字节前面都填两个高位0,得到4个8bit的字节。
5. 然后将这4个8bit的字节转换成10进制,对照Base64编码表,得到对应编码后的字符。
注:
• 由于要求被编码字符是8bit,所以须在ASCII编码范围内,\u0000-\u00ff,中文就不行。
• 由于2^6=64,而以1个6bit为一个单元,因此一定能在0~63的编码表中找到对应的编码!
举例如下:
(一)字符长度为能被3整除时:比如“Tom”:
这里写图片描述
(二)字符串长度不能被3整除时,比如“Lucy”:
这里写图片描述
由于Lucy只有4个字母,所以按3个一组的话,第二组还有两个空位,所以需要用0来补齐。这里就需要注意,因为是需要补齐而出现的0,所以转化成十进制的时候就不能按常规用base64编码表来对应,所以不是a, 可以理解成为一种特殊的“异常”,编码应该对应“=”。
如果要编码的二进制数据不是3的倍数,最后会剩下1个或2个字节怎么办?Base64用\x00字节在末尾补足后,再在编码的末尾加上1个或2个=号(最多2个=号,理解?),表示补了多少字节,解码的时候,会自动去掉。
所以,Base64编码会把3字节的二进制数据编码为4字节的文本数据,长度增加33%,好处是编码后的文本数据可以在邮件正文、网页等直接显示。

三、简单Python实现

Python内置的base64可以直接进行base64的编解码:
这里写图片描述
由于标准的Base64编码后可能出现字符+和/,在URL中就不能直接作为参数,所以又有一种”url safe”的base64编码,其实就是把字符+和/分别变成-和_:
这里写图片描述
还可以自己定义64个字符的排列顺序,这样就可以自定义Base64编码,不过,通常情况下完全没有必要。
由于=字符也可能出现在Base64编码中,但=用在URL、Cookie里面会造成歧义,所以,很多Base64编码后会把=去掉:
这里写图片描述
去掉=后怎么解码呢?因为Base64是把3个字节变为4个字节,所以,Base64编码的长度永远是4的倍数,因此,需要加上=把Base64字符串的长度变为4的倍数,就可以正常解码了。

四、练习

请写一个能处理去掉=的base64解码函数:
这里写图片描述
这是做完我会在评论里面体现。

Base64编码原理与Python实现详解 Base64是一种将二进制数据编码为ASCII字符的常用技术,其核心原理是将每3个字节的二进制数据转换为4个可打印字符。这种编码方式起源于电子邮件系统,解决了早期协议只能传输7位ASCII字符的限制。在数据传输和存储场景中,Base64确保了二进制内容能够安全通过文本协议传输,广泛应用于邮件附件、网页内嵌资源(如Data URL)、HTTP基本认证等领域。通过Python实现Base64编解码器可以深入理解其分组转换、补位处理和字符映射等关键技术细节,同时性能优化技巧如查表法和批量处理能显著提升编码效率。理 阅读详情

相关推荐

Python实现图片Base64编码解码:原理、方法与实战应用

Base64编码是一种将二进制数据转换为ASCII文本字符串的编码方案,其核心原理是将每3个字节(24位)的二进制数据重新分组为4个6位单元,并映射到64个可打印字符(A-Z、a-z、0-9、+、/)上。这种编码技术的主要价值在于它能够在纯文本环境中安全地传输或存储二进制数据,避免因特殊字符(如换行符、终止符)引起的解析错误。在Web开发、API接口设计和数据存储等应用场景中,Base64编码常用于将图片等二进制资源内嵌到JSON、XML、HTML或CSS中,例如构建Data URL实现邮件内嵌图片或前端C

weixin_34290631的博客 357

Python手写一个Base64编解码工具

python手写base64

you are sherlocked by me! 1658

从波士顿动力SpotMini拆解看四足机器人机械设计:关节布局与电机选型的5个关键决策点

本文深入解析波士顿动力SpotMini四足机器人的机械设计,聚焦关节布局与电机选型的5个关键决策点。通过拆解髋关节偏移距、膝关节传动链、电机热管理等核心设计,揭示商业级四足机器人的工程智慧,为工业巡检、物流机器人等应用提供实用参考。

postgres8guard的博客 892

python接收base64图片

接上一篇:js 选择图片并在页面预览(以base64形式) python import base64 from flask import request # 接收图片 img_upload = request.files.get("img_upload") # 判断是否接收到图片 if img_upload: # 读取图片 image_string = base64.b64encode(img_upload.read()) image_string = str(image_string, "utf

Amily_an的博客 1285

vue引入使用腾讯地图

// 引入鹅厂地图 initMap(lat = 0.0000000, lng = 0.0000000) { // 定义地图中心点坐标- var center = new TMap.LatLng(lat, lng) // 定义map变量,调用 TMap.Map() 构造函数创建地图 map = new TMap.Map(document.getElementById('txMapBox'), { center: center, // 设.

LiangRZ 4536

vmware vsphere 证书过期告警处理方法

vSphere Clinet 管理页面出现“证书告警” ,检查证书未发现现有证书有过期现象

m0_51902127的博客 3637

python Http服务,传输base64图片

flask base64 http服务 图片识别服务 python

qq_21331593的专栏 2708

从理论到代码:如何用随机矩阵理论(RMT)优化你的微生物共现网络分析?

本文详细介绍了如何利用随机矩阵理论(RMT)优化微生物共现网络分析,解决传统阈值法的主观性和不稳定性问题。通过R语言实现端到端的分析流程,包括矩阵标准化、本征值谱分析和自动阈值确定,显著提升网络构建的准确性和可靠性。该方法特别适用于高通量测序数据,能自动识别噪声与真实信号的边界,为微生物组学研究提供更精确的互作网络分析工具。

weixin_29096377的博客 361

base64原理及其编解码的python实现

base64原理及其编解码的python实现base64base64简介base64编码表base64编码原理base64编解码的python实现其他base编码base16base32base36、base58、 base62、 base85、base91、 base92 base64 base64简介 base64是一种基于64个可打印字符来表示二进制数据的表示方法。26=64,所以每6bit为一个单元,对应某个可打印字符。3字节有24bit,对应4个base64单元,即3字节任意二进制数据可由4个可打

P1umH0的博客 1512

倍福 MODBUS TCP/IP通信

(*默认字符串80字节,此处声明为255字节,可以一次性传42个UINT数据.5位整数加一个空格,即每个数据6字节*)(*---------------------------------------- 以下为用户程序 ----------------------------------------*)(*读回并换算后的值*)(*准备写到PLC的值*)(*用于比较两次读回的值相差多少,以估计通讯的速度, Act_CalcDiff*)(*用于切换读和写,Act_Protocal*)

qq_33280096的博客 1367

从零拆解快手Web端__NS_hxfalcon:JS逆向签名参数定位与复现

在JS逆向与前端反爬攻防中,签名参数总是绕不开的核心环节。无论是接口加密还是请求签名,其本质都是通过在客户端收集环境信息、时间戳与业务参数,经特定算法计算后生成用于服务端校验的动态令牌。理解这类参数的生成原理,不仅能提升逆向分析效率,也能帮助前端开发者更好地设计自身接口防护方案。在实际工程中,面对经Webpack打包且高度混淆的代码,直接全局搜索参数名往往难以奏效,需要结合请求抓包、调用栈跟踪、环境适配等方法逐步定位。此类签名参数广泛存在于现代Web应用的GraphQL或REST接口中,是接口数据安全的重要

weixin_29474431的博客 336

Base64编码原理及Python实现方法

BASE64介绍 该算法被设计用来把任意序列的8位字节描述为一种不易被人直接识别的形式,达到一眼望去完全看不出内容。此算法的复杂程度要小,效率高。如果是基于以上两点,那么我们使用最简单的单字母代替法等即可,实际上Base64要稍微复杂些,这是因为在Email的传送过程中,由于历史原因,Email只被允许传送ASCII字符,即一个8位字节的低7位。 编码规则 把3个8位字节(3*8=24)转化为4个6位的字节(4*6=24),再根据每个字节的值,用base64编码表中的值替换。编码后字符串长度为死的倍数,不足

T3rra_的博客 2503

VisionMaster图像源模块的5个隐藏功能:从自动切换到二次开发接口

本文深入解析了VisionMaster图像源模块的5个隐藏功能,从基础的自动切换与字符触发过滤,到高级的脚本扩展与基于COM组件的二次开发接口。这些功能能显著提升工业视觉项目的自动化水平、灵活性与系统集成能力,帮助开发者实现更高效的离线测试流水线和外部精确控制。

rgv23456789的博客 651

base64编码原理及简单python的实现

base64编码原理 base64 Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,在了解Base64编码之前,先了解几个基本概念:位、字节。 位:"位(bit)"是计算机中最小的数据单位。每一位的状态只能是0或1; 字节:8个二进制位构成1个"字节(Byte)",字节是存储空间的基本计量单位。1个字节可以储存1个英文字母,2个字节可以存储1个汉字; Base64编码的作用 因...

qq_42197755的博客 424

【华为OD技术面试手撕真题】1、长度最小的子数组 | 手撕真题+思路参考+代码解析(C & C++ & Java & Python & JS)(三种解法)

【华为OD面试手撕真题】长度最小的子数组,本专栏更新每年华为OD机试的高频手撕代码题,每个题目都会使用五种语言进行解答(C & C++& Java & Python & JS),思路分析都非常详细, 实现最低的时间复杂度和高通过率,每个解题思路超过百字,内含各个编程语言的八股文面试题,欢迎大家订阅学习, 代码可以直接运行使用,全网限时最低价,持续更新

KJ.JK 1万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Python实现自定义Base64加密:从编码原理到可定制码表的安全实践

Base64编码是一种广泛用于数据传输的编码方案,其核心原理是将二进制数据转换为由64个可打印ASCII字符组成的文本格式,以确保数据在传输过程中不因特殊字符而被错误处理。然而,标准Base64的码表是公开固定的,不具备任何保密性,这使其无法满足对数据混淆或轻量级加密的需求。通过引入可自定义的私有码表,我们可以改造Base64,实现一种基于“秘密码表”的简单加密效果,从而为配置文件、本地日志等非核心数据提供基础的混淆保护。这种自定义Base64加密工具在Python中易于实现,涉及字符串操作、位运算和码表映

weixin_29269441的博客 255

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

python实现base64_关于base64编码的原理及如何在python中实现

BASE64什么是base64?base64解决什么问题?base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。Base64编码是从二进制到字符的过程,可用于在HTTP环境下传递较长的标识信息。采用Base64编码具有不可读性,需要解码后才能阅读。如何使用base64base64的编码都是按字符串长度,以每3个8bit的字...

weixin_36078790的博客 458

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Base64原理及魔改更换码表

一,Base64是什么(原理比较难理解,可参考下面的实践 ) Base64是一种基于64个可打印字符来表示二进制数据的表示方法。由于2的6次方等于64,所以每6个比特为一个单元,对应某个可打印字符。三个字节有24个比特,对应于4个Base64单元,即3个字节需要用4个可打印字符来表示。它可用来作为电子邮件的传输编码。在Base64中的可打印字符包括字母A-Z、a-z、数字0-9,这样共有62个字符,此外两个可打印符号在不同的系统中而不同。一些如uuencode的其他编码方法,和之后binhex的版本使用不

Codeooo 博客 1万+

base64 python实现

理论 在上面链接,自己通过python实现了一下 https://baijiahao.baidu.com/s?id=1644892102150918183&wfr=spider&for=pc import base64 def pre_dict(): # 得到base64字典,类似于ascii字典 dict_ = {} q = 0 for i in range(65, 91): dict_[q] = chr(i) q +.

我的博客 837

Base64编码和解码(手写和调包)

做了很久的CTF,一直使用在线工具去解析base64,从没想过这些编码的原理,终于有心思研究一下。 0x01. 什么是base64? Base64是一种用64个字符来表示任意二进制数据的方法。它是一种编码方式,并不是加密方式。它通过将二进制数据转变为64个“可打印字符”,完成了数据在HTTP协议上的传输。 0x02. base64如何使用? Base64编码要求把3个8位字节(3∗8=243*8 =243∗8=24)转化为4个6位的字节(4∗6=244*6=244∗6=24),之后在6位的前面补两个0,形成

l8947943的博客 3945

python 自定义base64

class MyBase64(obejct): STANDARD_ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' # standard base64 alphabet def __init__(self, alphabet=None): if alphab...

taotoxht的专栏 2541

base64编码和解码算法

目录一、概述二、原理三、算法源码四、TK版源码 Base64编码是一种基于64个可打印字符来表示二进制数据的方法。目前Base64已经成为网络上常见的传输8位二进制字节代码的编码方式之一。   为什么会有Base64编码呢?因为有些网络传送渠道并不支持所有的字节,例如:传统的邮件只支持可见字符的传送,像ASCII码的控制字符就不能通过邮件传送。这样用途就受到了很大的限制。图片的二进制流的每个字节不可能全部是可见字符,这就导致图片的二进制流无法传送。最好的解决方式就是在不改变传统协议的情况下,做

指尖魔法师 4038

Base64编码原理与Python实战:从密码学基础到安全传输

Base64编码是现代数据传输中的基础编码技术,其核心原理是将二进制数据转换为由64个ASCII字符组成的文本格式。这种编码方式通过6位单元映射实现数据安全传输,特别适用于需要避免二进制数据损坏的场景(如HTTP协议、JWT令牌等)。从技术实现来看,Base64编码会带来约33%的数据膨胀,但保证了纯文本环境的兼容性。在Python中,标准库提供了完整的Base64编解码支持,而URL安全变体通过字符替换解决了特殊符号转义问题。实际工程中,Base64广泛应用于文件嵌入、认证令牌等场景,但需注意其并非加密算

weixin_28715953的博客 253

解密 Base64 编码:从原理到应用的全面解析

在网络传输、数据存储的世界里,Base64 编码如同一座隐形的桥梁,默默承担着重要的角色。此外,在一些需要对数据进行简单加密或隐藏的场景中,Base64 编码也能派上用场,虽然它并不是一种安全的加密方式,但能在一定程度上起到混淆数据的作用。补 2 个 0 后变成 011000010110001000,分成 3 个 6 位组,分别是 011000、010110、001000,对应的数值是 24、22、8,在映射表中对应的字符是 “Y”“W”“I”,再加上 1 个填充符 “=”,JavaScript 实现​。

BANaanaa的博客 1121
上一篇: 《Python3廖雪峰》datetime转timestamp练习题答案
下一篇: Python知识结构图
phoenxior
博客等级 码龄16年 23粉丝 9原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值