名词解释

Base64算法最早是为了解决电子邮件传输的问题的,早先的邮件传输协议中只支持ASCII码传递,如果要传输二进制文件,如图片和视频,是无法传输的,而BASE64可以将二进制文件内容编码成为只包含ASCII码的内容,这样就可以传输了。   Base64算法大家常常说成是加密算法,但准确的来说,Base64不是一种加密算法,只能算是一种基于64个字符的编码算法。 它有一个字符映射表,每个字符映射了一个十进制编码,共映射了64个字符。Base64将给定的数据经二进制转换后与字符映射表相对应,得到所谓的密文;映射表如下,映射表的最后是一个等号,是作为补位符用来补位的。

编号 	字符 	编号 	字符 	编号 	字符 	编号 	字符
0 		A 		16 		Q 		32 		g 		48 		w
1 		B 		17 		R 		33 		h 		49 		x
2 		C 		18 		S 		34 		i 		50 		y
3 		D 		19 		T 		35 		j 		51 		z
4 		E 		20 		U 		36 		k 		52 		0
5 		F 		21 		V 		37 		l 		53 		1
6 		G 		22 		W 		38 		m 		54 		2
7 		H 		23 		X 		39 		n 		55 		3
8 		I 		24 		Y 		40 		o 		56 		4
9 		J 		25 		Z 		41 		p 		57 		5
10 		K 		26 		a 		42 		q 		58 		6
11 		L 		27 		b 		43 		r 		59 		7
12 		M 		28 		c 		44 		s 		60 		8
13 		N 		29 		d 		45 		t 		61 		9
14 		O 		30 		e 		46 		u 		62 		+
15 		P 		31 		f 		47 		v 		63 		/

JAVA中Base64编码使用

涉及jdk工具类,java.util.Base64

示例代码

package util;

import java.io.UnsupportedEncodingException;
import java.util.Base64;

public class Base64Util {
	public static void main(String[] args) throws UnsupportedEncodingException {
		
		String str = "密";
		String str1 = testEncode(str);
		System.out.println(str1);
		String str2 = testDecode(str1);
		System.out.println(str2);
	}
	
	
	public static String testEncode(String str) throws UnsupportedEncodingException {
		return Base64.getEncoder().encodeToString(str.getBytes("UTF-8"));
	}
	
	public static String testDecode(String str) throws UnsupportedEncodingException {
		return new String(Base64.getDecoder().decode(str),"UTF-8");
	}
}

示例代码,转文件

@Test
public void imageToBase64() throws IOException {
	String url = "F:\\a.png";
	File file = new File(url);
	
	FileInputStream fin = new FileInputStream(file);
	byte[] all = new byte[(int) file.length()];
	fin.read(all);
	fin.close();
	String str1 =   Base64.getEncoder().encodeToString(all);
	System.out.println(str1);
	
	byte[] out = Base64.getDecoder().decode(str1);
	for(int i=0; i< out.length; i++) {
		if(out[i]<0) out[i]+=256;
	}
	FileOutputStream fou = new FileOutputStream(new File("F:\\b.png"));
	fou.write(out);
	fou.close();
}