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