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);
}
}

 

转载于:https://www.cnblogs.com/xiaofei4j/p/7532343.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值