2019-10-15-base64转码
名词解释
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();
}