Base64
本文最后更新于29 天前

起初是在爬虫时,处理登录密码加密的时候遇到的,需要base64编码(为了解决乱码),这是在密码学的知识点,用于加密后编码表找不到对应字符, 出现乱码。

一、定义

Base64是一种二进制到文本的编码方式。

Base64使用到的64个字符:

  • A-Z 26个
  • a-z 26个
  • 0-9 10个
  • + 1个
  • / 1个

下图是Base64码表,

image.png
计算机传输的基本单位

这里科普一下计算机单位的知识:

在GDK、utf-8以及大多数计算机系统中,一个字节(byte)由8位二进制数组成

一个字符由1到4个字节组成(utf-8)

一个字节由8位二进制数组成(utf-8)

由图可知,在base64中,一个字节是由6位二进制数组成的。

二、原理

下面我以举例的方式说明,一共有两种情况。

1.情况一

下面举例说明:原数据为三个字节(utf-8)

将原数据转换成二进制则为24位的二进制,再将二进制以每六位一个字节用base64编码转换成了四个字节。

例如:编码Man

三个字符Man编码后为四个字符TWFu。

由此看出原数据一个字节需要8位,base64编码需要6位。所以如果要传数据,就得是3得倍数的字节。所以Base64编码后的数据比原数据略长,为原来的4/3.

2.情况二

当然如果要需要编码的字节数不是3的倍数,就需要多出1或2个字节,那么可以使用下面的方法进行处理:先使用0字节值在末尾补足,使其能够被3整除,然后再进行Base64的编码。在编码后的Base64文本后加上一个或两个 = 号,代表补足的字节数。也就是说,当最后剩余两个八位(待补足)字节(2个byte)时,最后一个6位的Base64字节块有四位是0值,最后附加上两个等号;如果最后剩余一个八位(待补足)字节(1个byte)时,最后一个6位的base字节块有两位(36-2*8=2)是0值,最后附加一个等号。 参考下表:

三、用途

1.显示 base64 编码的图片(网页中的一些小图片,可以直接以 base64 编码的方式嵌入,不用再链接请求消耗网络资源。)

2. 浏览器端图片压缩

3.对于证书来说,尤其是根证书,一般是 base64 编码的,在网上被很多人下载

4.电子邮件的附件一般是 base64 编码,因为附件往往有不可见字符

5.常用于在密码的加密后可能会出现不可用字符,所以往往用base64对叫加密后的密码进行编码。

四、注意

1.Base64编码是从二进制值到某些特定字符的编码,这些特定字符一共64个,所以称作Base64。

2.在项目中,对报文进行压缩、加密后,最后一步一般是 base64 编码。因为 base64 编码的字符串更适合不同平台,不同语言的传输。

3.算法是编码,不是压缩,编码后只会增加字节数(一般是比之前的多1/3,比如之前是3, 编码后是4)

4.算法简单,基本不影响效率

5.算法可逆,解码很方便,不用于私密传输。

6.毕竟编码了,肉眼不能直接读出原始内容。

7.加密后的字符串只有【0-9a-zA-Z+/=】 ,不可打印字符(转译字符)也可以传输。

文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇