首页 > 代码库 > Java 加密框架 02 Base64
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));
Java 加密框架 02 Base64
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。