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

java加密基础(一) —— BASE64编码

时间:2017-09-16 20:39:51      阅读:147      评论:0      收藏:0      [点我收藏+]

标签:junit   exception   基础   byte   log   decode   oid   ==   第三章   

  工作之后第一次接触到java加密机制,当时需求是使用RSA做数字签名。当时看到之后一脸懵逼,就查了各种资料。

  对于学习过程中我走了不少弯路,主要是因为不知道先看什么在看什么。下面说一下我的学习经历

  首先,要了解BASE64算法,因为java加密基本上都用到了BASE64;然后就是对称加密和非对称加密了(下一章节着重介绍,这里就不多做描述了);最后就是了解下数字签名(会在第三章节中介绍到)

       我们都知道ASCII字符一共有256,而计算机记录数据的方式只有0、1,所以就只能使用8bit才能表示一个ASCLL字符。BASE64顾名思义一共有64个字符,所以只需要6bit就可以表示了。那么BASE64是怎么表示ASCLL的全部字符的哪?8和6的最小公倍数 是24,也就是说3个ASCII字符可以由4个BASE64字符来表示,保证有效位数是一样的。也就是说每四位BASE64作为一组,也就是24bit位一组,如果在最后发现不足24bit了怎么办哪?下面上图做下解释:

技术分享

该图表示的是正好24bit时BASE64的解析编码方式。

技术分享

该图中A的BASE64编码的表示为QQ,因为只有8bit,对应的BASE64只剩下2bit了,所以要补4个0,所以就成了QQ。原则是Base64字符的最小单位是四个字符一组,所以对于不足四个字符的就用=填充,因此BASE64只可能在最后出现一个或两个=,对于在解析时不解析=就可以了。

最后做一个java中对BASE64的编码及解析

import java.io.IOException;

import org.junit.Test;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

public class Demo1 {
@Test
public void demo1() throws IOException{
String str = "hello world!"; //aGVsbG8gd29ybGQhMQ==
BASE64Encoder encode = new BASE64Encoder(); //aGVsbG8gd29ybGQh
String encodeStr = encode.encode(str.getBytes());
System.out.println(encodeStr);
BASE64Decoder decoder = new BASE64Decoder();
String decoderStr = new String(decoder.decodeBuffer(encodeStr));
System.out.println(decoderStr);
}
}

 

java加密基础(一) —— BASE64编码

标签:junit   exception   基础   byte   log   decode   oid   ==   第三章   

原文地址:http://www.cnblogs.com/xiaofei4j/p/7532343.html

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