1. 程式人生 > >java加密基礎(一) —— BASE64編碼

java加密基礎(一) —— BASE64編碼

test 分享 非對稱 學習 int ava 學習過程 public encode

  工作之後第一次接觸到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編碼