Base64详解

Base64是一种用于将二进制数据转换为文本格式的编码方法
一、定义与原理
定义:Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,它基于64个可打印字符来表示二进制数据。
原理:Base64编码将输入的二进制数据按照6个比特(bit)为一组进行分组,并将每组转换为对应的Base64字符。具体来说,它将二进制数据分成8位字节组,每个字节组转换为6位二进制数,然后映射到64个字符的Base64字母表中。
二、Base64字符集
Base64字符集包括:
小写字母a-z
大写字母A-Z
数字0-9
符号“+”和“/”
这64个字符共同构成了Base64编码的基础。
三、编码过程
将二进制数据按照每3个字节一组进行分割(如果数据长度不是3的倍数,则进行填充操作)。
将每组3个字节的二进制数据转换为24位的二进制数。
将这24位二进制数按照每6位一组进行分割,得到4组6位的二进制数。
将每组6位的二进制数映射到Base64字符集中的对应字符。
将得到的4个字符作为编码后的输出。
四、解码过程
解码过程是编码过程的逆操作,具体步骤如下:
将编码后的Base64字符串按照每4个字符一组进行分割。
将每组4个字符映射回对应的6位二进制数。
将得到的4组6位二进制数合并成24位的二进制数。
将这24位二进制数按照每8位一组进行分割,得到3个字节的二进制数据(如果进行了填充操作,则需要去除填充部分)。
将得到的3个字节的二进制数据转换为原始的二进制数据。
五、应用场景
Base64编码由于其跨平台性和易于传输存储的特点,被广泛应用于以下场景:
网络通信:在HTTP、HTTPS等网络协议中,Base64编码用于传输加密后的密码、证书等敏感数据,以及二进制数据(如图像、文件等)。
数据存储:在数据库、文件系统等数据存储场景中,Base64编码可用于存储二进制数据,如图片、音频等。
电子邮件:在电子邮件协议中,Base64编码用于传输附件、签名等二进制数据。
六、优缺点
优点:
跨平台性:Base64编码后的数据可以在不同的系统和应用程序之间传输和存储。
易于传输和存储:Base64编码后的数据只包含可打印字符,因此可以在不支持二进制数据的环境中传输。
简单易实现:Base64编码解码算法简单,易于实现。
缺点:
增加数据长度:Base64编码后的数据长度会比原始数据增加约1/3(即33%),因为每3个字节的数据会被编码为4个字符。
编码后数据可被破解:Base64编码不提供加密功能,只是一种将二进制数据转换为文本的方式,因此编码后的数据仍然可以被破译。
综上所述,Base64作为一种广泛应用于网络通信和数据存储的编码技术,实现了二进制数据与文本数据的相互转换,为数据的传输和存储提供了便利。但同时也要注意其增加数据长度和编码后数据可被破解的缺点。

String base64 = Base64.encodeBase64String(JSON.toJSONString(submitReq).getBytes());
import java.io.File;  
import java.io.FileInputStream;  
import java.io.IOException;  
import java.util.Base64;  

public class ImageToBase64 {  

    public static void main(String[] args) {  
        // 替换为你的图片文件路径  
        String imagePath = "path/to/your/image.jpg";  

        try {  
            // 读取图片文件到byte数组  
            File file = new File(imagePath);  
            byte[] bytes = new byte[(int) file.length()];  
            try (FileInputStream fis = new FileInputStream(file)) {  
                fis.read(bytes);  
            }  

            // 使用Base64进行编码  
            String encodedImage = Base64.getEncoder().encodeToString(bytes);  

            // 输出或处理编码后的字符串  
            System.out.println(encodedImage);  

        } catch (IOException e) {  
            e.printStackTrace();  
        }  
    }  
}

在Java前端与后端之间进行数据传输时,可以使用以下常用的加密方式来保护敏感信息(如身份证号):
HTTPS:使用HTTPS协议进行数据传输可以提供安全的通信通道。HTTPS利用了SSL/TLS协议对数据进行加密和身份验证,确保数据在传输过程中不被篡改或窃取。
Base64编码:Base64编码是一种将二进制数据转换为可打印字符的编码方式。前端可以将敏感信息(如身份证号)进行Base64编码后再发送到后端,后端则进行解码还原得到原始数据。

import java.util.Base64;

public class Base64Example {
    public static void main(String[] args) {
        String input = "身份证号";

        // 前端对数据进行Base64编码
        String encodedData = Base64.getEncoder().encodeToString(input.getBytes());
        System.out.println("Encoded data: " + encodedData);

        // 后端对数据进行Base64解码
        byte[] decodedBytes = Base64.getDecoder().decode(encodedData);
        String decodedData = new String(decodedBytes);
        System.out.println("Decoded data: " + decodedData);
    }
}
  /**
     * 二进制文件转Base64
     *
     * @param fileStream 文件流
     */
    public static String binaryFile2Base64(InputStream fileStream) {
        ByteArrayOutputStream arrayStream = new ByteArrayOutputStream();

        //拷贝到缓存中
        if (0 != copyStream(fileStream, arrayStream)) {
            return null;
        }

        //对字节数组Base64编码
        Base64.Encoder encoder = Base64.getEncoder();
        return new String(encoder.encode(arrayStream.toByteArray()));
    }

    /**
     * base64转二进制
     *
     * @param base64Content base64编码
     */
    public static InputStream base642BinaryFile(String base64Content) {
        if (StringUtil.isNullOrEmpty(base64Content)) {
            return null;
        }

        //对输入内容进行解码
        try {
            byte[] Content = Base64.getDecoder().decode(base64Content);
            return new ByteArrayInputStream(Content);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

猜你喜欢

转载自blog.csdn.net/Fireworkit/article/details/143433670