码迷,mamicode.com
首页 > 编程语言 > 详细

Base64算法

时间:2020-06-23 01:07:48      阅读:68      评论:0      收藏:0      [点我收藏+]

标签:映射   system   code   去掉   进制   一个   示例   比特币   byte   

简介

Base64是网络上最常见的用于传输8Bit字节码的可读性编码算法之一。所谓Base64,即是说在编码过程中使用了64种字符:大写A到Z、小写a到z、数字0到9、“+”和“/”。可读性编码算法不是为了保护数据的安全性,而是为了可读性。可读性编码不改变信息内容,只改变信息内容的表现形式。
Base58是Bitcoin(比特币)中使用的一种编码方式,主要用于产生Bitcoin的钱包地址,相比Base64,Base58不使用数字"0",字母大写"O",字母大写"I",和字母小写"i",以及"+"和"/"符号。

原理
base64 是 3个字节为一组,一个字节 8位,一共 就是24位 ,然后,把3个字节转成4组,每组6位,3 * 8 = 4 * 6 = 24 ,每组6位,缺少的2位,会在高位进行补0 ,这样做的好处在于 ,base取的是后面6位,去掉高2位 ,那么base64的取值就可以控制在0-63位了,所以就叫base64,111 111 = 32 + 16 + 8 + 4 + 2 + 1 = 64。

映射表

技术图片

示例

“abc”和"中"都为3个字节,共24位,24 / 6 = 4,因此进行Base64编码后,输出4个字符。

例如,abc在ASCII表对应的字节数组是97,98,99,二进制数为01100001,01100010,01100011,按照规则6个一组划分后为011000,010110,001001,100011,高位补0后为00011000,00010110,00001001,00100011,对应的byte数为24,22,9,35,映射表查找,对应字符为YWJj

System.out.println(Base64.encode("abc".getBytes()));//YWJj
System.out.println(Base64.encode("中".getBytes()));//5Lit

大家可能发现一个问题,咱们的base64有时候会有个 = 号,但是在映射表里面没有发现 = 号 , 这个地方需要注意,等号非常特殊,因为base64是三个字节一组 ,如果当我们的位数不够的时候,会使用等号来补齐。

例如:字符"1",对应的十进制byte数字为49,二进制为00110001,6个bit一组,切分为001100和01,最后一个数字低位补0凑齐6位为010000,因此得到两个十进制数,12和16,查找映射表为MQ。又因为Base64三个字节一组划分,此处差2个字节,因此补两个等号,变成MQ==。

//1个字符,补2个=
System.out.println(Base64.encode("1".getBytes()));//MQ==
//2个字符,补1个=
System.out.println(Base64.encode("12".getBytes()));//MTI=
//3个字符,不需要补=
System.out.println(Base64.encode("123".getBytes()));//MTIz
System.out.println(Base64.encode("硅谷".getBytes()));//56GF6LC3

 

Base64算法

标签:映射   system   code   去掉   进制   一个   示例   比特币   byte   

原文地址:https://www.cnblogs.com/noyouth/p/13179759.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!