加密算法之Base64初探

前言

        本章讲解加密算法初探之Base64

方法

1、概念

        Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。可查看RFC2045~RFC2049,上面有MIME的详细规范。
        Base64编码是从二进制到字符的过程,可用于在HTTP环境下传递较长的标识信息。采用Base64编码具有不可读性,需要解码后才能阅读。
        Base64由于以上优点被广泛应用于计算机的各个领域,然而由于输出内容中包括两个以上“符号类”字符(+, /, =),不同的应用场景又分别研制了Base64的各种“变种”。为统一和规范化Base64的输出,Base62x被视为无符号化的改进版本。

        从以上的概念中我们不难看出,Base64实际上是一种编码方式,而不是严格意义上的加密算法,但可以作为学习加密算法起到一定的铺垫作用。

2、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(含补位和未对应分组)

加密算法之Base64初探_第1张图片

China的最终Base64编码为:Q2hpbmE=

以下是Base64编码对照表: 

加密算法之Base64初探_第2张图片

3、注意事项

  • 通过上面的描述,我们知道Base64算不上是一种加密算法,其实也就是一种编码的方式,不能用于诸如密码等重要数据的加密,将直接破解
  • 中文有多种编码(比如:utf-8、gb2312、gbk等),不同编码对应Base64编码结果都不一样
  • 由于其优势,广泛的应用于网络传输,如图片数据等

4、Java实现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();
    }
}

运行结果如下:

加密算法之Base64初探_第3张图片

 

你可能感兴趣的:(加密算法,java)