简介:

  Base16编码使用16个ASCII字符对任何数据进行编码,Base16与Base64的实现原理类似,同样是将原数据二进制形式取指定位数转换为ASCII码。首先获取数据的二进制形式,将其串联起来,每4个比特为一组进行切分,每一组内的4个比特可转换到指定的16个ASCII字符中的一个,将转换后的ASCII字符连接起来,就是编码后的数据。

  字典:

  Base16依赖更小的字典,Base16编码时每4个字符为一个分组,字典的长度为24=16,字典值如下:

Value Encoding Value Encoding Value Encoding Value Encoding
0 0 4 4 8 8 12 C
1 1 5 5 9 9 13 D
2 2 6 6 10 A 14 E
3 3 7 7 11 B 15 F

  字典中包含0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F,没有包含Base64中的特殊字符,为什么呢。原来是一个字节是8个比特,Base16编码是以4个比特为一组,一个字节正好分为两组,所以不需要补位,只要按照值在字典中查找即可。

  演示示例:

  Base16的实现较少,在dnsjava中提供了Base16的实现,dnsjava的Maven坐标如下:

<dependency><groupId>dnsjava</groupId><artifactId>dnsjava</artifactId><version>3.1.0</version>
</dependency>

  依赖dnsjava的Base16示例:

package com.securitit.serialize.bs64;import org.xbill.DNS.utils.base16;public class Base16Tester {public static void main(String[] args) throws Exception {String plainStr = null;String bs16Str = null;byte[] plainBts = null;// 原文内容.plainStr = "Hello Base16!Now this is testing Base16!Please see the result!";plainBts = plainStr.getBytes("UTF-8");// Base16测试.bs16Str = base16.toString(plainBts);System.out.println("Base64编码结果:" + bs16Str);plainBts = base16.fromString(bs16Str);plainStr = new String(plainBts, "UTF-8");System.out.println("Base64解码结果:" + plainStr);}}

  输出结果:

Base16编码结果:48656C6C6F20426173653136EFBC814E6F7720746869732069732074657374696E6720426173653136EFBC81506C65617365207365652074686520726573756C74EFBC81
Base16解码结果:Hello Base16!Now this is testing Base16!Please see the result!

  总结:

  Base16与Base64优劣对比:

  · Base16使用了更小的字典,Base16包含16个字符(0-9A-F),Base64包含65个字符(a-zA-Z0-9+/=或a-zA-Z0-9-_=)。

  · Base16编码规则是4比特为一分组,Base64编码规则是6比特为一分组。

  · 由于编码规则的不同,Base16正好可以完全切分数据,无需补位;Base64无法完全切分数据,需要使用=补位, 补位的个数在{0,1,2}范围之内。

  · Base16编码后数据会膨胀一倍,Base64编码后数据会膨胀1/3。

  · Base16编码后数据无特殊字符,而Base64包含特殊字符。Base64在URL传输等场景下需要尤为注意特殊字符的处理。

Base16 应用与原理解析相关推荐

  1. Spark Shuffle原理解析

    Spark Shuffle原理解析 一:到底什么是Shuffle? Shuffle中文翻译为"洗牌",需要Shuffle的关键性原因是某种具有共同特征的数据需要最终汇聚到一个计算节 ...

  2. 秋色园QBlog技术原理解析:性能优化篇:用户和文章计数器方案(十七)

    2019独角兽企业重金招聘Python工程师标准>>> 上节概要: 上节 秋色园QBlog技术原理解析:性能优化篇:access的并发极限及分库分散并发方案(十六)  中, 介绍了 ...

  3. Tomcat 架构原理解析到架构设计借鉴

    ‍ 点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 Tomcat 架构原理解析到架构设计借鉴 Tomcat 发展这 ...

  4. 秋色园QBlog技术原理解析:性能优化篇:数据库文章表分表及分库减压方案(十五)...

    文章回顾: 1: 秋色园QBlog技术原理解析:开篇:整体认识(一) --介绍整体文件夹和文件的作用 2: 秋色园QBlog技术原理解析:认识整站处理流程(二) --介绍秋色园业务处理流程 3: 秋色 ...

  5. CSS实现元素居中原理解析

    原文:CSS实现元素居中原理解析 在 CSS 中要设置元素水平垂直居中是一个非常常见的需求了.但就是这样一个从理论上来看似乎实现起来极其简单的,在实践中,它往往难住了很多人. 让元素水平居中相对比较简 ...

  6. 秋色园QBlog技术原理解析:Web之页面处理-内容填充(八)

    文章回顾: 1: 秋色园QBlog技术原理解析:开篇:整体认识(一) --介绍整体文件夹和文件的作用 2: 秋色园QBlog技术原理解析:认识整站处理流程(二) --介绍秋色园业务处理流程 3: 秋色 ...

  7. 秋色园QBlog技术原理解析:UrlRewrite之无后缀URL原理(三)

    文章回顾: 1: 秋色园QBlog技术原理解析:开篇:整体认识(一) --介绍整体文件夹和文件的作用 2: 秋色园QBlog技术原理解析:认识整站处理流程(二) --介绍秋色园业务处理流程 本节,将从 ...

  8. Android之Butterknife原理解析

    转载请标明出处:[顾林海的博客] 个人开发的微信小程序,目前功能是书籍推荐,后续会完善一些新功能,希望大家多多支持! ##前言 Butterknife是一个专注于Android系统的View注入框架, ...

  9. 【深度学习】谷歌大脑EfficientNet的工作原理解析

    [深度学习]谷歌大脑EfficientNet的工作原理解析 文章目录 1 知识点准备1.1 卷积后通道数目是怎么变多的1.2 EfficientNet 2 结构2.1 方式2.2 MBConv卷积块2 ...

  10. Web APi之过滤器执行过程原理解析【二】(十一)

    前言 上一节我们详细讲解了过滤器的创建过程以及粗略的介绍了五种过滤器,用此五种过滤器对实现对执行Action方法各个时期的拦截非常重要.这一节我们简单将讲述在Action方法上.控制器上.全局上以及授 ...

最新文章

  1. 758.6G每秒:阿里云成功防御国内最大规模Memcached DDoS反射攻击
  2. 批量备SAP中CBO ABAP 程序代码为TXT文件备份
  3. 《Windows核心编程》---邮槽通信
  4. 一张图看懂智联车管理云平台
  5. html css jq 弹幕,Jquery.barrager.js
  6. JMeter中使用“用户自定义变量”实现参数化
  7. DB2造数据存储过程
  8. iOS【面试】2018年面试题集锦
  9. 郭依婷—大学生的创业故事
  10. CentOS 7.6安装Mysql5.7
  11. markdown添加目录
  12. MySQL查询行记录关键字_MySQL数据库~~~~~查询行(文件的内容)
  13. vscode中terminal不支持workon激活虚拟环境?试试修改默认shell
  14. collections库
  15. OFDM和OFDMA区别笔记
  16. 《白帽子讲Web安全》浏览器安全
  17. Elasticsearch+Spring Boot集成实践
  18. 马云退休启示录:第一代互联网创始人老去,谁来接棒?
  19. android硬件加速导致绘制,Android中的硬件加速
  20. 享元模式 - Unity

热门文章

  1. 软件质量需要静态代码分析和动态测试
  2. DEP和ASLR的原理与破解
  3. 巴斯勒相机的ip掩码_basler调相机规范步骤
  4. oracle双机热备份方法(转)
  5. 自考计算机00051笔记,自考00051 管理系统中计算机应用自考资料笔记自考小抄.doc...
  6. 数学建模——Logistic Regression逻辑回归算法(二分类及多分类的Python代码实现)
  7. 商务与经济统计阅读笔记2
  8. 计算机的软键盘在哪里,Win8软键盘在哪 Win8.1屏幕键盘打开方法图解
  9. H3C交换机常用命令
  10. 游戏角色设计有哪些风格类型