java加密基础 —— BASE64编码

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java加密基础 —— BASE64编码相关的知识,希望对你有一定的参考价值。

  工作之后第一次接触到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编码的主要内容,如果未能解决你的问题,请参考以下文章

Java 基础学习总结(202)—— BASE64MD5DESAESHMAC恺撒加密SHARSAPBE 加解密汇总

Java 基础学习总结(202)—— BASE64MD5DESAESHMAC恺撒加密SHARSAPBE 加解密汇总

Java 基础学习总结(202)—— BASE64MD5DESAESHMAC恺撒加密SHARSAPBE 加解密汇总

使用 base 64 编码的 javax.mail.Authenticator

Java Base64 加密/解密

JS实现的base64加密md5加密及sha1加密详解