java Base64编码

任务

        接到任务,需要把涉及附件路径的转成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编码过后原文也变成无法直接理解的字符格式,但是这种编码方式比较初级,很简单,很容易就可以被还原成原文,所以如果有比较重要的信息需要加密,需要使用其它安全的加密方式进行处理。

 

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Java中的Base64编码可以使用多种方式进行。在Java 8中,可以使用java.util包下的Base64类来处理Base64编码和解码。可以通过以下步骤进行编码和解码: 1. 首先,创建一个Base64编码器和解码器对象: ``` final Base64.Encoder encoder = Base64.getEncoder(); final Base64.Decoder decoder = Base64.getDecoder(); ``` 2. 接下来,准备需要编码的文本,将其转换为字节数组: ``` final String text = "字串文字"; final byte[] textByte = text.getBytes("UTF-8"); ``` 3. 进行编码,将字节数组转换为Base64字符串: ``` final String encodedText = encoder.encodeToString(textByte); System.out.println(encodedText); ``` 4. 进行解码,将Base64字符串转换为字节数组,并重新转换为文本: ``` System.out.println(new String(decoder.decode(encodedText), "UTF-8")); ``` 关于Base64编码和解码,还有其他方式可以实现。在早期的Java版本中,可以使用sun.misc套件下的BASE64Encoder和BASE64Decoder类。这种方式的缺点是效率较低。示例代码如下: ``` final BASE64Encoder encoder = new BASE64Encoder(); final BASE64Decoder decoder = new BASE64Decoder(); final String text = "字串文字"; final byte[] textByte = text.getBytes("UTF-8"); //编码 final String encodedText = encoder.encode(textByte); System.out.println(encodedText); //解码 System.out.println(new String(decoder.decodeBuffer(encodedText), "UTF-8")); ``` 另外,还可以使用org.apache.commons.codec.binary.Base64包下的Base64类进行编码和解码。这种方式相比sun包更加精简,并且执行效率更高。示例代码如下: ``` final Base64 base64 = new Base64(); final String text = "字串文字"; final byte[] textByte = text.getBytes("UTF-8"); //编码 final String encodedText = base64.encodeToString(textByte); System.out.println(encodedText); //解码 System.out.println(new String(base64.decode(encodedText), "UTF-8")); ``` 总而言之,Java中有多种方式可以进行Base64编码和解码,包括java.util包下的Base64类、sun.misc包下的BASE64Encoder和BASE64Decoder类以及org.apache.commons.codec.binary.Base64包下的Base64类。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天狼1222

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值