使用Base64Utils

Spring框架提供了可以进行base64编码解码的工具包,我们可以直接导入使用

import org.springframework.util.Base64Utils;

base64编码并返回字符串

public static String encryStringBase64(String str){
    return Base64Utils.encodeToString(str.getBytes(StandardCharsets.UTF_8));
}

base64解码并生成字符串

public static String decryStringBase64(String base64_str){
    byte[] str = Base64Utils.decode(base64_str.getBytes(StandardCharsets.UTF_8));
    return new String(str);
}

这里解码后会返回一个byte类型的数组,需要将它转换成字符串,需要使用new来创建字符串,而不可用直接使用toString()方法,如果使用了toString方法则会返回数组的内存地址字符串

Base64Utils源码解析

通过查看Base64Utils的源码可以发现Base64Utils也是通过java自带的Base64工具包来实现的

image-20220320154140560

方法作用
encode(byte[] src)对给定的字节数组进行base64编码。 参数原始字节数组 返回编码后的字节数组
decode(byte[] src)对给定的字节数组进行base64解码。 参数编码的字节数组 返回原始字节数组
encodeUrlSafe(byte[] src)使用RFC 4648“URL和文件名安全字母表”对给定的字节数组进行base64编码。 参数: SRC -原始字节数组 返回: 编码后的字节数组
decodeUrlSafe(byte[] src)base64解码给定的字节数组使用RFC 4648“URL和文件名安全字母表”。 参数: SRC -编码的字节数组 返回: 原始字节数组
encodeToString(byte[] src)将给定的字节数组进行base64编码为String。 参数: SRC -原始字节数组 返回: 编码后的字节数组作为UTF-8字符串
decodeFromString(String src)从给定的UTF-8字符串字节数组解码。 参数: src -编码的UTF-8字符串 返回: 原始字节数组
encodeToUrlSafeString(byte[] src)使用RFC 4648“URL和文件名安全字母表”将给定的字节数组编码为字符串。 参数: SRC -原始字节数组 返回: 编码后的字节数组作为UTF-8字符串
decodeFromUrlSafeString(String src)使用RFC 4648“URL和文件名安全字母表”从UTF-8字符串解码给定的字节数组。 参数: src -编码的UTF-8字符串 返回: 原始字节数组

源代码

/*
 * Copyright 2002-2019 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.springframework.util;

import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.Base64;

/**
 * A simple utility class for Base64 encoding and decoding.
 *
 * <p>Adapts to Java 8's {@link java.util.Base64} in a convenience fashion.
 *
 * @author Juergen Hoeller
 * @author Gary Russell
 * @since 4.1
 * @see java.util.Base64
 */
public abstract class Base64Utils {

   private static final Charset DEFAULT_CHARSET = StandardCharsets.UTF_8;


   /**
    * Base64-encode the given byte array.
    * @param src the original byte array
    * @return the encoded byte array
    */
   public static byte[] encode(byte[] src) {
      if (src.length == 0) {
         return src;
      }
      return Base64.getEncoder().encode(src);
   }

   /**
    * Base64-decode the given byte array.
    * @param src the encoded byte array
    * @return the original byte array
    */
   public static byte[] decode(byte[] src) {
      if (src.length == 0) {
         return src;
      }
      return Base64.getDecoder().decode(src);
   }

   /**
    * Base64-encode the given byte array using the RFC 4648
    * "URL and Filename Safe Alphabet".
    * @param src the original byte array
    * @return the encoded byte array
    * @since 4.2.4
    */
   public static byte[] encodeUrlSafe(byte[] src) {
      if (src.length == 0) {
         return src;
      }
      return Base64.getUrlEncoder().encode(src);
   }

   /**
    * Base64-decode the given byte array using the RFC 4648
    * "URL and Filename Safe Alphabet".
    * @param src the encoded byte array
    * @return the original byte array
    * @since 4.2.4
    */
   public static byte[] decodeUrlSafe(byte[] src) {
      if (src.length == 0) {
         return src;
      }
      return Base64.getUrlDecoder().decode(src);
   }

   /**
    * Base64-encode the given byte array to a String.
    * @param src the original byte array
    * @return the encoded byte array as a UTF-8 String
    */
   public static String encodeToString(byte[] src) {
      if (src.length == 0) {
         return "";
      }
      return new String(encode(src), DEFAULT_CHARSET);
   }

   /**
    * Base64-decode the given byte array from an UTF-8 String.
    * @param src the encoded UTF-8 String
    * @return the original byte array
    */
   public static byte[] decodeFromString(String src) {
      if (src.isEmpty()) {
         return new byte[0];
      }
      return decode(src.getBytes(DEFAULT_CHARSET));
   }

   /**
    * Base64-encode the given byte array to a String using the RFC 4648
    * "URL and Filename Safe Alphabet".
    * @param src the original byte array
    * @return the encoded byte array as a UTF-8 String
    */
   public static String encodeToUrlSafeString(byte[] src) {
      return new String(encodeUrlSafe(src), DEFAULT_CHARSET);
   }

   /**
    * Base64-decode the given byte array from an UTF-8 String using the RFC 4648
    * "URL and Filename Safe Alphabet".
    * @param src the encoded UTF-8 String
    * @return the original byte array
    */
   public static byte[] decodeFromUrlSafeString(String src) {
      return decodeUrlSafe(src.getBytes(DEFAULT_CHARSET));
   }

}
如果觉得我的文章对你有用,请随意赞赏