赞
踩
本章讲解加密算法初探之Base64
Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。可查看RFC2045~RFC2049,上面有MIME的详细规范。
Base64编码是从二进制到字符的过程,可用于在HTTP环境下传递较长的标识信息。采用Base64编码具有不可读性,需要解码后才能阅读。
Base64由于以上优点被广泛应用于计算机的各个领域,然而由于输出内容中包括两个以上“符号类”字符(+, /, =),不同的应用场景又分别研制了Base64的各种“变种”。为统一和规范化Base64的输出,Base62x被视为无符号化的改进版本。
从以上的概念中我们不难看出,Base64实际上是一种编码方式,而不是严格意义上的加密算法,但可以作为学习加密算法起到一定的铺垫作用。
在了解Base64之前,需要了解ASCII码的相关内容(在计算机中,所有的数据在存储和运算时都要使用二进制数表示,简单来说ASCII码就是现实世界语言文字与计算机语言交流的规范,现实世界的语言都可以使用ASCII码进行标识)。
如:China这个单词,参照ASCII代码表其ASCII码十进制表示为:67 104 105 110 97
那么如何将China这个单词使用Base64编码呢?
第一步:首先将China单词转化为ASCII码的二进制表示方式
第二步:每6个bit为一组进行分组,需要注意的是 将以前8bit一组的数据拆分成6bit一组的数据,很可能会发生位数不足的情况,位数不足我们需要在后面补0,同时确保均匀分组(分组后位数为6和8的公倍数),没有对应上数据的分组用 “=”表示。
第三步:将新的分组前面补充00至8bit,参照Base64编码表得出Base64编码串
以China为例,详细步骤如下:
由于China只有5*8=40bit,以6bit分组时务必确保是6和8的公倍数,所以以6bit分组后数据达到了48bit(含补位和未对应分组)
China的最终Base64编码为:Q2hpbmE=
以下是Base64编码对照表:
- package cn.edu.ccut;
-
- import java.util.Base64;
-
- public class Base64Test {
-
- public static void main(String[] args) throws Exception {
- String str = "China";
- base64(str);
-
- }
-
- public static void base64(String str) {
- byte[] bytes = str.getBytes();
-
- //Base64 加密
- String encoded = Base64.getEncoder().encodeToString(bytes);
- System.out.println("Base 64 加密后:" + encoded);
-
- //Base64 解密
- byte[] decoded = Base64.getDecoder().decode(encoded);
-
- String decodeStr = new String(decoded);
- System.out.println("Base 64 解密后:" + decodeStr);
-
- System.out.println();
- }
- }
运行结果如下:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。