Base64编码的工作原理与实际应用

目录

前言

一、什么是Base64编码?

二、Base64编码的原理

三、Base64编码的应用场景

四、为什么要使用Base 64

五、Base64加密解密的实现


前言

        当你需要将二进制数据转换为可传输和存储的文本格式时,Base64编码是一个常用的选择。在这篇博客中,我们将详细介绍Base64编码的原理、实现以及如何进行加密和解密。   

一、什么是Base64编码?

        Base64编码是一种将二进制数据转换为纯文本字符的编码方式。它由64个字符组成,包括大小写字母、数字和两个特殊字符。Base64编码的主要目的是使二进制数据能够在不损失信息的情况下通过文本协议进行传输和存储。

二、Base64编码的原理

Base64编码的原理非常简单:将三个8位字节(即24位)划分为四个6位字节,并将每个6位字节映射到一个Base64字符。如果原始数据不能被3整除,会在末尾添加一些额外的位来填充。

Base64字符表如下所示:

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/

使用该字符表,可以将每个6位字节映射到一个字符。例如,二进制数 010110 011011 001001 可以被转换为 S2l。 

三、Base64编码的应用场景

  1. 电子邮件附件:电子邮件通常只能传输文本数据,无法直接传输二进制附件(例如图片、音频、视频文件)。通过使用Base64编码,可以将二进制附件转换为纯文本格式,然后作为邮件正文的一部分进行传输。

  2. URL参数传递:在URL中包含特殊字符(例如空格、加号、斜杠等)会导致解析问题。通过使用Base64编码,可以将参数数据转换为一系列安全的文本字符,以便在URL中传递。

  3. 数据存储:在某些情况下,我们希望将二进制数据存储为可读的文本格式,例如在数据库或文本文件中。Base64编码提供了一种简单而有效的方式来实现这一目标。

  4. 加密算法:在某些加密算法中,加密后的数据可能包含不可打印的字符或特殊字符。通过使用Base64编码,可以将加密后的数据转换为纯文本格式,以便于传输或存储。

四、为什么要使用Base 64

Base 64主要用途不是加密,而是把一些二进制数转成普通字符,方便在网络上传输。 由于一些二进制字符在传输协议中属于控制字符,不能直接传送,所以需要转换一下才可以。

由于某些系统中只能使用ASCII字符,Base64就是用来将非ASCII字符的数据转换成ASCII字符的一种方法,Base64特别适合在http,mime协议下快速传输数据。比如网络中图片的传输。

Base64,并非安全领域下的加密解密算法。虽然经常遇到所谓的base64的加密解密。但base64只能算是一个编码算法,对数据内容进行编码来适合传输。虽然base64编码过后原文也变成不能看到的字符格式,但是方式初级又简单。

五、Base64加密解密的实现

package com.ctb.demo;

import java.util.Base64;
import java.util.Base64.Decoder;
import java.util.Base64.Encoder;
/**
 * 
 * 
 * @author biao
 *
 * 2024年6月15日
 */
public class Base64Demo {

		//base64 解码
	    public static String decode(byte[] bytes) {  
	    	Decoder decoder = Base64.getDecoder();
	    	byte[] decode = decoder.decode(bytes);
	        return new String((decode));  
	    }  
	  
	    //base64 编码
	    public static String encode(byte[] bytes) {  
	    	Encoder encoder = Base64.getEncoder();
	    	String encode = encoder.encodeToString(bytes);
	        return new String(encode);  
	    }
	    
	    public static void main(String[] args) {
			String string = "青龙偃月刀";
			//编码
			String encode = encode(string.getBytes());
			System.out.println(string + "\t编码后的字符串为:" + encode);
			//解码
			String decode = decode(encode.getBytes());
			System.out.println(encode + "\t字符串解码后为:" + decode);
	
		}
	}

结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/713301.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++ 51 之 继承中的构造和析构

对象构造和析构的调用原则 继承中的构造和析构 子类对象在创建时会首先调用父类的构造函数父类构造函数执行完毕后,才会调用子类的构造函数当父类构造函数有参数时,需要在子类初始化列表(参数列表)中显示调用父类构造函数析构函数调用顺序和构造函数相…

可以用来制作硬模空心耳机壳的胶粘剂有哪些种类?

可以用来制作硬模空心耳机壳的胶粘剂有哪些种类? 制作耳机壳的胶粘剂有很多种类,常见的有环氧树脂胶水、UV树脂胶、快干胶、热熔胶等。 这些胶粘剂都有不同的特点和适用场景,可以根据自己的需求选择合适的类型。 例如: 环氧树脂…

Adobe设计替代软件精选列表

Adobe软件的替代列表,最初由 XdanielArt 收集,并由社区改进。您可以随意打开问题或拉出请求,或从数据中创建图像(以便于共享)。列表总是按照免费和开源选项的顺序排列,但根据您的用例,它可能不是最佳选择 替代因素 &am…

Python 潮流周刊#56:NumPy 2.0 里更快速的字符串函数

△△请给“Python猫”加星标 ,以免错过文章推送 本周刊由 Python猫 出品,精心筛选国内外的 250 信息源,为你挑选最值得分享的文章、教程、开源项目、软件工具、播客和视频、热门话题等内容。愿景:帮助所有读者精进 Python 技术&am…

【linux】认识“文件”的本质,理解“文件系统”的设计逻辑,体会linux优雅的设计理念

⭐⭐⭐个人主页⭐⭐⭐ ~~~~~~~~~~~~~~~~~~ C站最❤❤❤萌❤❤❤博主 ~~~~~~~~~~~~~~~~~~~ ​♥东洛的克莱斯韦克-CSDN博客♥ ~~~~~~~~~~~~~~~~~~~~ 嗷呜~ ✌✌✌✌ 萌妹统治世界~ 🎉🎉🎉🎉 ✈✈✈✈相关文章✈✈✈✈ &#x1f4a…

2023年的Top20 AI应用在近一年表现怎么样?

AI应用现在进入寒武纪大爆发时代,百花争艳。如果倒回到2023年初,那时候排名靠前的AI应用在一年多时间,发生了哪些变化?能带给我们什么启示? 在2023年1月,排名靠前20的AI应用是: DeepL&#xff…

MATLAB中与直方图有关函数的关系

histogram Histogram plot画直方图 histcounts 直方图 bin 计数 histcounts是histogram的主要计算函数。 discretize 将数据划分为 bin 或类别 histogram2 画二元直方图 histcounts2 二元直方图 bin 计数 hist和histc过时了。替换不建议使用的 hist 和 histc 实例 hist → \r…

Day54 JDBC

Day54 JDBC JDBC:SUN公司提供的一套操作数据库的标准规范,就是使用Java语言操作关系型数据库的一套API JDBC与数据库驱动的关系:接口与实现的关系 给大家画一个jdbc的工作模式图 1.JDBC的四大金刚 1.DriverManager:用于注册驱动 2…

【Quartus 13.0】NIOS II 部署UART 和 PWM

打算在 EP1C3T144I7 芯片上部署 nios ii 做 uart & pwm控制 这个芯片或许不够做 QT 部署 这个芯片好老啊,但是做控制足够了,我只是想装13写 leader给的接口代码是用VHDL写的,我不会 当然verilog我也不太会 就这样,随便写吧 co…

SUSTAINABILITY,SCIESSCI双检期刊还能投吗?

本期,小编给大家介绍的是一本MDPI出版社旗下SCIE&SSCI双检“毕业神刊”——SUSTAINABILITY。据悉,早在2024年1月,ElSEVIER旗下的Scopus数据库已暂停收录检索期刊SUSTAINABILITY所发表文章,同时重新评估是否继续收录该期刊。随…

Qwen2——阿里巴巴最新的多语言模型挑战 Llama 3 等 SOTA

引言 经过几个月的期待, 阿里巴巴 Qwen 团队终于发布了 Qwen2 – 他们强大的语言模型系列的下一代发展。 Qwen2 代表了一次重大飞跃,拥有尖端的进步,有可能将其定位为 Meta 著名的最佳替代品 骆驼3 模型。在本次技术深入探讨中,我…

零基础入门学用Arduino 第三部分(三)

重要的内容写在前面: 该系列是以up主太极创客的零基础入门学用Arduino教程为基础制作的学习笔记。个人把这个教程学完之后,整体感觉是很好的,如果有条件的可以先学习一些相关课程,学起来会更加轻松,相关课程有数字电路…

python-基础篇-类与对象/面向对象程序设计-是什么

文章目录 定义一:面对对象是一种编程思想定义一:面向对象是一种抽象1、面向对象的两个基本概念2、面向对象的三大特性 定义一:你是土豪,全家都是土豪面向对象编程基础类和对象定义类创建和使用对象访问可见性问题面向对象的支柱 定…

C++初学者指南第一步---4.基本类型

C初学者指南第一步—4.基本类型 文章目录 C初学者指南第一步---4.基本类型1.变量声明2.快速概览Booleans 布尔型Characters 字符型Signed Integers 有符号整数Unsigned Integers 无符号整数Floating Point Types 浮点数类型 3.Common Number Representations 常用的数字表示常用…

用Copilot画漫画,Luma AI生成视频:解锁创意新玩法

近年来,随着人工智能技术的不断发展,各种创意工具也层出不穷。今天,我们就来介绍一种全新的创作方式:使用Copilot画漫画,再将漫画放入Luma AI生成视频。 Copilot:你的AI绘画助手 Copilot是一款基于人工智…

【Kubernetes项目部署】k8s集群+高可用、负载均衡+防火墙

项目架构图 (1)部署 kubernetes 集群 详见:http://t.csdnimg.cn/RLveS (2) 在 Kubernetes 环境中,通过yaml文件的方式,创建2个Nginx Pod分别放置在两个不同的节点上; Pod使用hostP…

TCP及UDP协议

tcp是点到点的,只有一条路径,到达顺序和发送顺序是相同的 回复的确认号是序发送端的序列号加上data的长度 1910 发送端的序列号也是那么算的 ack和下一个seq一样 那就没问题 三次握手四次挥手: 为啥是三次呢? 假如一次&#xf…

SpringBoot使用jasypt实现数据库信息的脱敏,以此来保护数据库的用户名username和密码password(容易上手,详细)

1.为什么要有这个需求? 一般当我们自己练习的时候,username和password直接是爆露出来的 假如别人路过你旁边时看到了你的数据库账号密码,他跑到他的电脑打开navicat直接就是一顿连接,直接疯狂删除你的数据库,那可就废…

学习笔记——网络管理与运维——SNMP(SNMP架构)

三、SNMP架构 1、SNMP结构概述 SNMP被设计为工作在TCP/IP协议族上,基于TCP/IP协议工作,对网络中支持SNMP协议的设备进行管理。所有支持SNMP协议的设备都提供SNMP这个统一界面,使得管理员可以使用统一的操作进行管理,而不必理会设…

基于Spring+Vue的前后端分离的计算器

麻雀虽小,五脏俱全 该项目已部署上线:http://calculator.wushf.top/ 并通过Gitee Go流水线实现持续部署。 需求分析 表达式求值 支持加减乘除四则运算、支持高精度 获取日志 Api文档定义 前后端分离,人不分离 通过Apifox定义接口细节&#…