java Base64编码

发布时间:2024年01月19日

任务

????????接到任务,需要把涉及附件路径的转成base64编码。如果已经是base64编码的,就不续约进行转码。

????????Base64 编码是用64(2的6次方)个特定的ASCII(ASCII 编码是用256(2的8次方)个字符,对二进制数据进行编码的方式)字符来表示256(2的8次方)个ASCII字符,也就是说三个ASCII字符经过Base64编码后变为四个的ASCII字符显示(公约数为24),编码后数据长度比原来增加1/3,不足3n用“=”补足。

?

处理:

判断是否为base64编码,使用正则的方式。

  public static Boolean isBase64(String str) {
         String base64Pattern = "^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)$";
         return Pattern.matches(base64Pattern, str);
    }

?

Base64Utils

import java.io.UnsupportedEncodingException;
import java.util.Base64;
import java.util.regex.Pattern;
public class Base64Utils {
 
    private static final String UTF_8 = "UTF-8";
    private static Base64.Encoder encoder;
    private static Base64.Decoder decoder;

    static {
        encoder = Base64.getEncoder();
        decoder = Base64.getDecoder();
    }

    //encode
    public static byte[] encode(byte[] bytes) {
        return encoder.encode(bytes);
    }

    public static String encode(String content) {
        byte[] encode = encode(content.getBytes());
        try {
            return new String(encode, UTF_8);
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return null;
    }

    public static String encode2String(byte[] bytes) {
        return encoder.encodeToString(bytes);
    }

    public static byte[] encode2Byte(String content) {
        return encode(content.getBytes());
    }

    //decode
    public static byte[] decode(byte[] bytes) {
        return decoder.decode(bytes);
    }

    public static byte[] decode2Byte(String content) {
        return decoder.decode(content.getBytes());
    }

    public static String decode2String(byte[] bytes) {
        try {
            return new String(decoder.decode(bytes),UTF_8);
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return null;
    }

    public static String decode(String content) {
        byte[] decode = decode(content.getBytes());
        try {
            return new String(decode, UTF_8);
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     *  判断是否为base64编码
     * @param str 
     * @return
     */
    public static Boolean isBase64(String str) {
         String base64Pattern = "^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)$";
         return Pattern.matches(base64Pattern, str);
    }
    
    public static void main(String args[]) {
        String sql = "select * from staff";
        System.out.println(sql);
        System.out.println(encode(sql));
        System.out.println(decode(encode(sql)));
        System.out.println(isBase64(encode(sql)));
        System.out.println(isBase64(decode(encode(sql))));
    }
}

使用:

读取的数据的时候,进行转码,使用 encodeStr进行处理

下载文件的时候,进行解码,使用decodeStr 进行处理。

转码和解码前都进行判断,这样就把问题解决了。

?

总结:

????????Base64 主要不是用来加密的,它主要的用途是把一些二进制数转成普通字符用于网络传输,这是因为一些二进制字符在传输协议中属于控制字符,不能直接在网络上传输。Base64是一个编码算法,对数据内容进行编码来适合网络传输。虽然Base64编码过后原文也变成无法直接理解的字符格式,但是这种编码方式比较初级,很简单,很容易就可以被还原成原文,所以如果有比较重要的信息需要加密,需要使用其它安全的加密方式进行处理。

?

文章来源:https://blog.csdn.net/qq_35461948/article/details/135696729
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。