hex和base32和base64的区别与联系
基本概念
hex也称为base16,意思是使用16个可见字符来表示一个二进制数组,编码后数据大小将翻倍,因为1个字符需要用2个可见字符来表示。
base32,意思是使用32个可见字符来表示一个二进制数组,编码后数据大小变成原来的8/5,也即5个字符用8个可见字符表示,但是最后如果不足8个字符,将用=来补充。
base64,意思是使用64个可见字符来表示一个二进制数组,编码后数据大小变成原来的4/3,也即3个字符用4个可见字符来表示。
用例
看个例子:
package mainimport "fmt"
import "encoding/hex"
import "encoding/base32"
import "encoding/base64"func main() {s := "hello world!"sb := []byte(s)hexString := hex.EncodeToString(sb)hexByte, err := hex.DecodeString(hexString)fmt.Println(hexString)// 68656c6c6f20776f726c6421fmt.Println(hexByte, err)// [104 101 108 108 111 32 119 111 114 108 100 33] <nil>base32StdString := base32.StdEncoding.EncodeToString(sb)base32HexString := base32.HexEncoding.EncodeToString(sb)base32StdByte, err1 := base32.StdEncoding.DecodeString(base32StdString)base32HexByte, err2 := base32.HexEncoding.DecodeString(base32HexString)fmt.Println(base32StdString)// NBSWY3DPEB3W64TMMQQQ====fmt.Println(base32HexString)// D1IMOR3F41RMUSJCCGGG====fmt.Println(base32StdByte, err1)// [104 101 108 108 111 32 119 111 114 108 100 33] <nil>fmt.Println(base32HexByte, err2)// [104 101 108 108 111 32 119 111 114 108 100 33] <nil>base64StdString := base64.StdEncoding.EncodeToString(sb)base64UrlString := base64.URLEncoding.EncodeToString(sb)base64StdByte, err1 := base64.StdEncoding.DecodeString(base64StdString)base64UrlByte, err2 := base64.URLEncoding.DecodeString(base64UrlString)fmt.Println(base64StdString)// aGVsbG8gd29ybGQhfmt.Println(base64UrlString)// aGVsbG8gd29ybGQhfmt.Println(base64StdByte, err1)// [104 101 108 108 111 32 119 111 114 108 100 33] <nil>fmt.Println(base64UrlByte, err2)// [104 101 108 108 111 32 119 111 114 108 100 33] <nil>
}
使用场景
有些小伙伴可能有疑问,为啥要把 "hello world!" 这么明白的东西变成一串看不懂的东西,其实是这个例子使用了可见字符而已,而有很多字符是不可见的,我们需要把这些不可见字符变成可见字符。那为啥要变成可见字符?你是看着乱码舒服还是看着可见字符舒服呢?其实不仅仅舒不舒服的问题,有些时候还必须要用可见字符,例如在网络中传输数据时,不同路由器对于不可见字符的处理是不同的,因此可能出现数据错误,因此还必须使用可见字符。
区别与联系
区别主要就是空间效率的区别,base64是具有比较高的空间效率的。当然,hex编码不区分大小写,但是base32与base64是区分的。
联系就是大家都是一种稳定的把二进制数组变成可见字符的编码方式。
base32中StdEncoding和HexEncoding所使用的字符不同,但是具体其他区别我也不是很清楚。
base64中URLEncoding一般用于编码URL
hex和base32和base64的区别与联系相关推荐
- hex文件和bin文件的区别和联系
1.分析一下hex文件 HEX格式文件以行为单位,每行由":"(16进制为:0x3a)开始,以回车键结束(16进制为:0x0d,0x0a).行内的数据都是由两个字符表示一个16进制 ...
- Base64 UrlEncode 区别
base64 1.包含A-Z a-z 0-9 和加号"+",斜杠"/" 用来作为开始的64个数字. 等号"="用来作为后缀用途. 2.2进制 ...
- base64 hex java_Java 中的 BASE64 和 十六进制转换器
使用Java中的JCA(Java Cryptography Architecture)做加密.解密.签名.验签.消息摘要等操作时,由于它们的输出和输入大多是byte数组,对于数据的存储交换不是太友好. ...
- buuctf [GXYCTF2019]BabySQli
常规sql注入都行不通,查看源码发现一个search.php, 先说说base32 和 base64 的区别, base32 只有大写字母和数字数字组成,或者后面有三个等号. base64 只有大写字 ...
- i春秋ctf训练营writeup-Recreators
Recreators 首先下载并解压,可以看到没有拓展名 直接winhex打开看看 由这里可以看出该文件应该是一个VMware虚拟磁盘镜像,那么修改拓展名为.vmdk,再用winhex打开. 可以看到 ...
- base64和hex
base64和hex 我们知道,字符分为二种:一种是可见字符:另一种是不可见字符. 1)三种编码方式 hex也称为base16,意思是使用16个可见字符来表示一个二进制数组,编码后数据大小将翻倍,因为 ...
- python:Base16, Base32, Base64, Base85 数据编码
python:Base16, Base32, Base64, Base85 数据编码 此模块提供了将二进制数据编码为可打印的 ASCII 字符以及将这种编码格式解码回二进制数据的函数. 它为 RFC ...
- HEX和BIN文件的区别
上一篇文章中演示的是裸板开发过程中可能遇到的两个问题的解决办法. 1,是在keil中编写程序并编译连接成可以下载到开发板的 .hex 文件,然后用jlink仿真器下载:2,是在ubuntu中编写编译 ...
- Hex和Bin的区别
转自:http://blog.csdn.net/spdian/article/details/52963467 HEX文件和BIN文件是我们经常碰到的2种文件格式.因为自己也是新手,所以一直对这两个文 ...
- base6 python 字节_Python使用base64模块进行二进制数据编码详解
前言 昨天团队的学妹来问关于POP3协议的问题,所以今天稍稍研究了下POP3协议的格式和Python里面的poplib.而POP服务器往回传的数据里有一部分需要用到Base64进行解码,所以就顺便看了 ...
最新文章
- tcl c语言笔试题,TCL技术类笔试题目.doc
- Python使用tpot获取最优模型、将最优模型应用于交叉验证数据集(5折)获取数据集下的最优表现,并将每一折(fold)的预测结果、概率、属于哪一折与测试集标签、结果、概率一并整合输出为结果文件
- Android Studio 插件的使用
- rssi室内定位算法原理_智慧定位系统之蓝牙网关在室内定位技术的原理浅析
- log4j配置文件及nutch中的日志配置
- Elasticsearch架构原理
- 12、数据库的设计范式
- Exchange server 2010系列教程之三 发送邮件测试
- You don't have permission to access / on this server提示 求解决办法~
- 第一次LeetCode周赛心得(力扣-cn周赛,使用python3)
- Maker工作室_激光雕刻机使用方法
- C/C++ 根据年月日计算星期几——蔡勒公式篇
- 基于MATLAB的图像拼接实现
- OSChina 周三乱弹 —— 风扇写着先生请自爱
- 【TODO】Java并发:@GuardedBy
- 【2021】朱伟(恋练有词)
- IPAD USB 充电程序
- Prometheus 配置钉钉告警
- 5G网络入门基础--5G网络的实现流程
- 3GPP TS 23501-g51 中英文对照 | 5.2.4 Authorisation