Java 加密框架 02 Base64

一段文字在经过 Base64 编码后面目全非,而经过Base64解码后又能恢复。这很有加密解密的意味。不过Base64 算法并不是加密算法,Base64 算法的转换方式很像古典加密算法中的单表置换算法。

Base64 算法最早用于解决邮件传输问题。在早期电子邮件只允许ASCII码字符。非ASCII码字符在传输时会有问题,所以出现了 Base64编码。

Base64 是一种基于64个字符的编码算法。经过Base64 编码后的数据会比原始数据略长,为原来的4/3倍。Base64 编码后的字符串的字符数是4的整数倍。

这张映射表中,value 是十进制编码 ,Encoding 是字符。共映射了64个字符。最后一个=,是永远补位的。

Base64 有2个规范:
RFC 2045:规定每行位76个字符,每行末尾需添加一个回车换行符,即便是最后一行不够76个字符,也要加换行符
RFC 4648: 没有换行符

Base64 还有几个相近的算法如 Base32,Base16 。为了能在http中以get方式传输二进制数据,还衍生了 url Base64。

url Base64 算法只要是替换了Base64映射表中的第62和63个字符。将+ 替换成 -,/替换成_ 。对于补位号 = , Bouncy Castle 使用.做补位符。Commons Codec 不使用补位符。

Base64 算法有编码和解码操作可以充当加密和解码操作。可以用做简单的加密。但要认识到 Base64 不能算是一种加密算法。 Base64 常用做密钥,密文和证书的一种通用存储编码格式。


Base64编码的操作:
1 将给定的字符串以字符为单位,转换为对应的字符编码
2 将字符编码转换为二进制
3 对获得的二进制做分组转换操作:每3个8位二进制码为一组,转换为每4个6位二进制码位一组(不足6位时低位补0)
4 对4-6二进制码补位,高位补2个0 ,组成4个8位二进制
5 将4-8二进制转换为十进制
6 通过映射表得到对应字符,不够4组的补=

从jdk1.8起,java提供了Base64 的实现,可以直接使用java.util.Base64。在jdk1.8之前,Java 并没有提供公开的Base64 实现(在 sun.misc 包中有内部实现),一般是自己实现,或引用commons-codec包

String s = "Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一";
byte[] b = s.getBytes("UTF-8");
byte[] out = java.util.Base64.getEncoder().encode(b);
System.out.println(new String(out));
out = java.util.Base64.getMimeEncoder().encode(b);
System.out.println(new String(out));
out = java.util.Base64.getUrlEncoder().encode(b);
System.out.println(new String(out));



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值