web安全 (2)-base64

base64在安全领域主要用于安全文件或数据的传输及存储,如一些专业的证书、密钥、token等,它们并不遵守任何文字编码,如果你用文字工具打开看,会看到很多特殊字符(乱码)。这些乱码在网上传输的时候,可能会被多个网关接收并转发,而有的网关并不一定能识别这些乱码,从而导致你的数据被错误处理或丢失。此时就需要先将乱码转换为大家都能识别的字符,才能正常传输,这种公认的字符就是base64编码。 

64个字符

base64编码就是将你的原始数据转换成只包含64种字符的编码格式,这64种字符是大家都支持的,如下:

52个大小写字母,10个数字,2个符号。索引是它的十进制数值,64个数值刚好可以用6位二进制表示。

转换过程

  1. 将原始数据按其原有的编码格式,转换为二进制。
  2. 在计算机中1个字节是8位二进制,每次将3个8位二进制拆分为4个6位二进制。3*8=24=4*6。
  3. 在6位二进制前面补2个0,变成8位二进制,占满一个字节。
  4. 将第3步的8位二进制转换为十进制数字,其中只有尾数6位是有效的,所以数值刚好就是上图中的0-63。
  5. 根据图的数值对应的字符,就是最终的转换结果。

比如:小字字母x,编写以下java代码可看到它的ASCII码值为120

		int x='x';
		System.out.println(x);
  1. 120=64+32+16+8,用8位二进制表示为01111000。
  2. 此时最多只够转换为2个6位二进制:011110   000000   这里尾数不够补了4个0。
  3. 前面补0转8位二进制:00011110  00000000
  4. 转十进制:30  0
  5. 对应上图中字符:e  A

我们用java中的Base64类来验证一下

		String x = Base64.getMimeEncoder().encodeToString("x".getBytes());
		System.out.println(x);

最终输出 eA==,上面说过每4个6位二进制为一组,如果最后不足4个的,后面补=号。也有些编码工具不补等号,因为在解码的时候根据4的倍数就能知道它的总长度。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值