Base64编码

什么是Base64

Base64是一种用64个字符表示任意二进制数据的方法。它是一种编码,而非加密。

A—Z、a—z、0-9、+、/

除此之外,使用(=)符号作为填充符号。

Base64应用

RSA密钥、加密后的密文、图片等数据中会有一些不可见字符。直接转成文本传输会出现乱码、数据错误、数据丢失等情况出现,可以使用Base64编码来解决。

Base64的代码实现和码表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//方法一:
//okio.ByteString
build.gradle
dependencies {
api 'com.squareup.okhttp3:okhttp:3.10.0'
}
ByteString byteString = ByteString.of("100".getBytes());
byteString.base64(); //码表 okio.Base64 encode

//方法二:
//java.util.Base64 Android8.0以上可用
Base64.getEncoder().encodeToString("测试".getBytes())

//方法三:
//android.util.Base64 码表
Base64.encodeToString

Base64编码细节

每个Base64字符代表原数据中的6bit。

Base64编码后的字符数是4的倍数。

编码的字节数是3的倍数时,不需要填充。

Base64编码的特点

  1. Base64编码是编码,不是压缩,编码后只会增加字节数。
  2. 算法可逆,解码很方便,不用于私密信息通信。
  3. 标准的Base64每行为76个字符,行末添加换行符。
  4. 加密后的字符串只有65种字符,不可打印字符也可传输。
  5. 在Java层可以通过hook对应方法名来快速定位关键代码。
  6. 在so层可以通过输入输出的数据和码表来确定算法。