GeekTop
  • 首页
  • 关于

GeekTop

不止代码

编码与解码

编码与解码

2021年7月1日 Alex Comments 0 Comment

计算机的编码

我们知道,在计算机的内部,所有的数据和指令,都是以二进制的形式存储的,只有0和1两种状态。

但是0和1并不符合人类的阅读习惯,所以我们要有一个转换。有多种不同的转换方式,对应多种编码标准。例如,在ASCII编码中,一共有128个编码,例如大写的字母A对应的二进制编码是01000001,十进制表示为65。

不同的编码方式对同一段二进制编码的理解方式是不同的,除了ASCII编码外还有UTF-8,UTF-16,GBK等,这里不再一一赘述。

base64编码

base64编码是将二进制表示成文本的一种方式,把3字节的二进制数据,6个bit一组,用一个整数表示,对应的整数范围是[0, 63],然后把这些整数用A~Z、a~z、0~9、+、/、=这些字符表示,0~25对应A~Z,26~51对应a~z,52~61对应0~9,+和/对应62、63。

从Java 8开始,Java对base64提供了原生支持。

@Test
public void testEncode1() {
    String originalInput = "ABC";
    final String s = Base64.getEncoder().encodeToString(originalInput.getBytes());
    System.out.println(s);
}

如果字节数不是3的整数倍,就在末尾补0x00,缺几个就补几个,这些补的0x00在编码后用=表示,如下代码会输出:QUI=。

@Test
public void testEncode2() {
    String b = "AB";
    final String s2 = Base64.getEncoder().encodeToString(b.getBytes());
    System.out.println(s2);
}

由于邮件网关开始设计的时候,只支持ASCII编码,所以如果需要传递非ASCII的内容,只能通过base64编码以后发送,收到邮件后再对邮件进行解码。所以base64的主要目的是把二进制的信息转化成文本信息进行处理,缺点是会把原来的信息膨胀三分之一。

base64是一种编码算法,并不是一种加密算法。如果把编码的字符改成16个,就成了base16编码算法,不过这样的编码效率会更低。同样的,我们还可以有base85编码算法,这种编码算法比base64编码效率更高,不过不太常用。


加密与解密

Post navigation

NEXT
Spring Boot是如何处理异常的
PREVIOUS
基于统计的图像目标检索

发表回复 取消回复

您的电子邮箱地址不会被公开。 必填项已用*标注

最近文章

  • 姥姥
  • 设计一个可扩展的用户模型
  • 使用 Apple 的 Keychain 保存 SSH 的 passphase
  • 解决 ABA 问题
  • 关于 macOS 上面部分 emoji 无法显示的问题
  • 这些年我技术栈的变化
  • 搬瓦工、狗云、hostodo、oracle对比测试
  • Google Drive 无法上传文件
  • 使用 socks5 代理 git ssh 协议
  • 到底要不要“润”
  • 可复用的代码
  • 关于疫情的一点点反思
  • 我的风控策略(投资篇)
  • 我的风控策略(生活篇)
  • Spring Boot是如何处理异常的
  • 编码与解码
  • 基于统计的图像目标检索
  • 有限状态机和状态模式
  • API安全设计
  • 用户密码的存储策略

近期评论

  • ǝɔɐǝԀʎzɐɹϽ发表在《可复用的代码》
  • Alex发表在《可复用的代码》
  • ǝɔɐǝԀʎzɐɹϽ发表在《到底要不要“润”》
  • ǝɔɐǝԀʎzɐɹϽ发表在《可复用的代码》
  • ǝɔɐǝԀʎzɐɹϽ发表在《我的风控策略(生活篇)》
  • ǝɔɐǝԀʎzɐɹϽ发表在《如何写出简洁优雅的代码》
  • 张志亮发表在《如何写出简洁优雅的代码》

分类

  • AI (2)
  • Java应用安全之道 (1)
    • 加密与解密 (1)
  • Odoo (2)
  • Python (1)
  • 图像处理 (1)
  • 年鉴 (1)
  • 数据库 (10)
  • 编程 (14)
    • Spring (1)
  • 读书笔记 (2)
  • 运维 (5)
  • 随笔 (10)

归档

  • 2023年1月 (2)
  • 2022年8月 (1)
  • 2022年7月 (4)
  • 2022年6月 (2)
  • 2022年5月 (2)
  • 2022年4月 (3)
  • 2021年10月 (1)
  • 2021年7月 (1)
  • 2021年5月 (1)
  • 2020年11月 (1)
  • 2020年7月 (1)
  • 2020年3月 (2)
  • 2020年2月 (1)
  • 2019年1月 (1)
  • 2018年12月 (2)
  • 2018年11月 (2)
  • 2017年4月 (1)
  • 2016年11月 (1)
  • 2016年9月 (1)
  • 2016年7月 (1)
  • 2016年5月 (3)
  • 2016年4月 (2)
  • 2016年3月 (1)
  • 2016年2月 (2)
  • 2015年12月 (1)
  • 2015年11月 (2)
  • 2015年8月 (1)
  • 2015年4月 (1)
  • 2015年3月 (1)

标签

Database devops Java MySQL PostgreSQL Python shell Spring SpringBoot Spring Security 安全 年鉴 总结 编程 随笔
© 2015-2023   Geektop.net All Rights Reserved.