大家好,我是刘志军,一名python开发者

以后决定把原创文章放在csdn进行首发,争取冲上榜单

base64 是什么?

Base64,顾名思义,就是包括小写字母a-z、大写字母A-Z、数字0-9、符号"+"、"/“一共64个字符的字符集,(另加一个“=”,实际是65个字符,至于为什么还会有一个“=”,这个后面再说)。任何符号都可以转换成这个字符集中的字符,这个转换过程就叫做base64编码。

base64怎么转换

首先将字符串(图片等)转换成二进制序列,然后按每6个二进制位为一组,分成若干组,如果不足6位,则低位补0。每6位组成一个新的字节,高位补00,构成一个新的二进制序列,最后根据base64索引表中的值找到对应的字符。

我们举个例子, 假设有字符串“abc", 我们要对其进行base64编码,最后结果会是什么呢?

字符串abc对应3个字节,一共24位,按6位为一组可分为4组,在每组的高位补上00,经过转换,abc 的 base64 编码是 YWJj, 由原来的3个字母变成了4个,所以base64会比原字符串更长。

那问题来了,假设原始字符串不够3个字节,只有一个字节或者两个字节怎么办?

以两个字节为例, 按照上面的转换逻辑,经过编码转换,第三个字节只有4位,需要在第三组前后都要加两个0,转换后的字符串是 YWI。 为了凑齐4个字节,还要在末尾补上一个"="号,最后得到的base64编码就是: “YWI=”

如果原始字符只有一个字节,原理是类似的,第二个字节除了前面补两个0,还要在后面补4个0,得到的字符串是YQ,剩下两个字节也用等号“=”来凑。所以a的base64编码就是 YQ==

总结一点就是只要原始字符串的长度不能被3整除,后面的位都会用0来补充。

base64用在哪些场景

1、html中的图片用base64表示

打开google的首页,就能看到某些样式中的图片不是一个资源地址,而是base64编码的字符串,这么做有什么好处呢? 当然是减少了一次http的请求,但也并不是什么图片都适合用base64来处理,因为图片越大,转换的base64的字符串就越长,对带宽的要求更高了。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yeH05YAV-1608518661626)(…/images/微信截图_20201221002353.png)]

2、邮件传输

早期电子邮件的收发只允许使用ascii字符,这就导致无法发送非ascii字符,图片等二进制文件。所以在MIME对电子邮件进行了扩展,该扩展协议就指定了内容的传输的编码格式,可以是base64,base64编码使得在电子邮件中传输图片成为可能。

当然也可以将base64的内容放在url中传输。

在主流编程语言中,都内置的base64模块,可以直接调用,无需自己重复造轮子

python 示例

# 编码
>>> base64.b64encode(b'abc')
b'YWJj'# 解码
>>> base64.b64decode(b'YWJj')
b'abc'

出了基本的base64,还有一种url safe 形式的编码方式,目的是将“+/” 替换成 “-_”, 因为标准的Base64并不适合直接放在URL里传输,URL编码器会把标准Base64中的“/”和“+”字符变为形如“%XX”的形式,而这些“%”号在存入数据库时还需要再进行转换。

>>> base64.b64encode(b'i\xcf\xbf')
b'ac+/'# 使用"url safe"的base64编码会把+/ 替换成 -_
>>> base64.urlsafe_b64encode(b'i\xcf\xbf')
b'ac-_'

base64 是加密算法吗?

base64不是加密算法,他只是一种编码方式,数据从一种形式转换为另一种形式进行传输/存储。

Base64到底是个啥编码? 我熬夜把它整明白了相关推荐

  1. 网页上的base64码太长?科普base64到底是啥

    一.前言 书接上回,上次是通过返回base64码给前端页面,实现了我们访问项目外图片的目的.只是代码实在是太长了,不好看啊,得想办法优化下.顺带了解下base64到底是啥,用着好不好,会不会影响速度呢 ...

  2. python3默认的代码编码是什么-Python3 到底什么是字符编码

    我之前老是有这种感觉, 就是明明已经看过很多关于字符编码的资料了, 感觉字符编码相关的知识点不难理解, 觉得自己已经把字符编码给弄懂了, 但当别人问我到底什么是字符编码, Unicode是什么啊, U ...

  3. 在线BASE64加密解密、UrlEncode编码/解码、native/ascii在线转换工具 -toolfk程序员工具网

    本文要推荐的[ToolFk]是一款程序员经常使用的线上免费测试工具箱,ToolFk 特色是专注于程序员日常的开发工具,不用安装任何软件,只要把内容贴上按一个执行按钮,就能获取到想要的内容结果.Tool ...

  4. 为了整明白苹果电脑到底会不会中毒,我真的把病毒拷了进去

    各位看标题就知道,作者又干了一件作死的事儿-- 事情是这样的. 前两天,突然有个朋友找到我,问最近有没有什么好的 Windows 笔记本可以推荐. 她说她买了没两个月的 MacBook 中了病毒,卡的 ...

  5. EL之GB(GBM):利用GB对回归(性别属性编码+调2参)问题(整数值年龄预测)建模

    EL之GB(GBM):利用GB对回归(性别属性编码+调2参)问题(整数值年龄预测)建模 目录 输出结果 设计思路 核心代码 输出结果 T1. T2. 设计思路 核心代码 #T1 nEst = 2000 ...

  6. Base64 算法原理,以及编码、解码【加密、解密】 介绍

    Base64编码,是我们程序开发中经常使用到的编码方法.它是一种基于用64个可打印字符来表示二进制数据的表示方法.它通常用作存储.传输一些二进制数据编码方法!也是MIME(多用途互联网邮件扩展,主要用 ...

  7. Base64 四种方式的编码和解码

    base64与字符串String之间的相互转换 package com.wzq;import javax.xml.bind.DatatypeConverter; import java.io.Unsu ...

  8. token要加编码decode吗_彻底弄明白Base64 编码

    Base64 encoding/decoding常见于各种authentication和防盗链的实现当中.彻底搞懂它绝对提升团队troubleshooting的底气.我们从纯手工方式编码解码开始,然后 ...

  9. 快速解码base64和utf-8的ASCII编码和URL解码

    看论坛上总是有人发乱七八糟的文字,根本看不懂,用下面的方法解密一下. 只要有浏览器的开发者工具就行了. UTF-16解码 console.log("\u5475\u5475") U ...

最新文章

  1. 赠书 | Python 预测股票价格,竟然这么简单
  2. 误差向量幅度(EVM)介绍
  3. python3 telnetlib实现telnet客户端
  4. ML:人工智能之机器学习ML解决实际应用问题的思路总过程(最全)
  5. 在package-lock.json中指定node-mass版本+独立编译flink中的flink-runtime-web模块
  6. 8.8.8.8,Google推出免费DNS解析服务器
  7. 利用jquery的ajax获取后台返回的json数据为空
  8. [asp.net]优化ViewState
  9. 人再囧途之泰囧.BD高清1280国语中英双字 附下载地址
  10. 解决:Mac下的Mounty卷不能在读/写模式下重新挂载.可能是因为先前没有完全卸载(安全删除)
  11. 新的博客,新的开始。
  12. 自动化测试如何计算ROI
  13. 第五周 项目二 建立链栈算法库
  14. Unity中的进度条(内含计数器)
  15. Autojs-QQ每日定时给女票/男票/闺蜜/基友发送一句话
  16. 介绍一个“王者”算法,它能认出游戏里的所有英雄
  17. python调用有道翻译_python 简单的调用有道翻译
  18. 电话号码正则表达式 代码 javascript+html,JS正则表达式判断11位手机号码
  19. 【教程】Matrikon OPC使用教程连载(二)
  20. mysql如何限制数据修改密码_MySQL_MySQL数据库中修改密码及访问限制设置详解,MySQL是一个真正的多用户、多 - phpStudy...

热门文章

  1. Redash -- Redash问题排查
  2. 【观察】中国企业下一阶段数字化转型,背后必有强大的数云融合平台
  3. 学术英语 | (8) WordList7
  4. 腾讯java程序设计师_腾讯大神耗时三年巅峰之作,立足实际开发,详解高并发程序设计...
  5. 现代控制理论(一) 状态空间方程
  6. verilog中有符号数和无符号数的相关运算
  7. 【netty学习】之零拷贝
  8. OPPO A31解账户锁刷机包 线刷教程
  9. 书都不会读,你还想成功—读书笔记
  10. 资本追逐之下,为什么说元宇宙的发展是大势所趋?