码迷,mamicode.com
首页 > 编程语言 > 详细

Java 加密框架 02 Base64

时间:2015-01-28 22:39:31      阅读:347      评论:0      收藏:0      [点我收藏+]

标签:java

一段文字在经过 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

标签:java

原文地址:http://blog.csdn.net/yanliang1/article/details/43240703

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!