当前位置: 首页 > ds >正文

使用BASE64实现编码和解码

系列文章目录

SpringBoot整合RabbitMQ并实现消息发送与接收
解析JSON格式参数 & 修改对象的key
VUE整合Echarts实现简单的数据可视化
Java中运用BigDecimal对字符串的数值进行加减乘除等操作
List<HashMap<String,String>>实现自定义字符串排序(key排序、Value排序)

更多该系列文章请查看我的主页哦


文章目录

  • 系列文章目录
  • 前言
  • 一、数据准备
  • 二、场景分析
  • 三、BASE64编码
    • 3.1 代码
    • 3.2 效果图
  • 四、BASE64解码
    • 4.1 代码
    • 4.2 效果图
  • 总结


前言

BASE64编码是一种将二进制数据转换为ASCII字符的编码方式,常用于在网络传输中传递、保存二进制数据。BASE64编码可以将任意的二进制数据转换为文本字符串形式,由于其特殊的编码方式,不易被人直接识别,也比较难以被篡改。

Java语言中提供了BASE64编码解码的支持,可以很方便地进行编码和解码操作。使用BASE64编码/解码非常简单,只需要调用相应的编码器或解码器即可。在进行BASE64编码解码时,需要注意数据类型的转换,以及一些特殊字符的处理。

下面我们来介绍如何在Java中进行BASE64编码解码操作,以及一些注意点和实例演示,帮助大家更好地掌握这个知识点。


一、数据准备

在前言中我们也了解了BASE64编码主要是在网络传输中使用,这样不易被人直接识别,也比较难以被篡改。所以我们在发送json数据时一般会用到编码,从而防止被其他人发现。

下面我们就准备一个json数据,如下所示:

{"status": "success","data": {"users": [{"id": 1,"name": "John Doe","age": 30,"email": "johndoe@example.com"},{"id": 2,"name": "Jane Smith","age": 25,"email": "janesmith@example.com"}],"products": [{"id": 1001,"name": "Product A","price": 19.99},{"id": 1002,"name": "Product B","price": 29.99}]},"message": "Data retrieved successfully"
}

如果这个数据很重要,我们在传输前就要先进行编码,从而使数据更加安全的进行传输。

二、场景分析

BASE64编码在很多场景中都有广泛的应用,下面是一些常见的场景分析:

  1. 数据传输:在网络通信中,有些数据可能包含特殊字符或无法直接传输,此时可以将数据进行BASE64编码,以文本形式传输。接收端再对数据进行解码恢复到原始格式。
  2. 图片和文件传输:在Web开发中,经常会涉及图片和文件的传输。由于HTTP协议仅支持文本传输,因此需要将二进制图片或文件进行BASE64编码后,以文本形式嵌入到网页或API请求中。
  3. 数据存储:有些数据库或系统只支持文本类型的存储,无法直接存储二进制数据。在这种情况下,可以对二进制数据进行BASE64编码后存储到数据库或其他存储介质中。
  4. 密钥交换:在加密算法中,密钥的传输和存储需要保证安全性。使用BASE64编码可以将密钥从二进制转换为文本形式,以便于传输和存储。

需要注意的是,BASE64编码虽然可以保证数据传输的可靠性,但它并非加密算法,无法提供数据的安全性。因此,在涉及敏感信息的场景中,仍需要结合其他加密手段来保障数据的安全性。

三、BASE64编码

3.1 代码

通过上述的描述,大家应该对BASE64有了一定的理解,下面我们来使用java代码实现BASE64编码,就对上述的json串进行编码:

		//编码 :encode  获得字符串的byets后在进行编码jsonObject.getBytes()byte[] encodedBytes = java.util.Base64.getEncoder().encode(jsonObject.getBytes());String base64Str = new String(encodedBytes);System.out.println("这是编码后的base64串:" + base64Str);

具体解释如下:

  1. byte[] encodedBytes = java.util.Base64.getEncoder().encode(jsonObject.getBytes());:首先,将jsonObject对象转换为字节数组,并使用java.util.Base64.getEncoder()获取BASE64编码器,然后对字节数组进行编码得到编码后的字节数组encodedBytes。
  2. String base64Str = new String(encodedBytes);:将编码后的字节数组encodedBytes转换为字符串形式,即获取到BASE64编码后的字符串base64Str。
  3. System.out.println(“这是编码后的base64串:” + base64Str);:打印输出编码后的BASE64串。

总结:该代码段实现了将一个JSON对象进行BASE64编码,并将编码结果以字符串形式打印输出。

3.2 效果图

通过上述的代码对json串进行编码,就可以拿到编码后的字符串。运行效果如下图所示:
在这里插入图片描述

四、BASE64解码

4.1 代码

编码后我们就可以传送了,但用户在接收到json数据后需要解码后往数据库中存储或做处理,所以这里我们写解码代码如下:

		//这个转空格为"+"号 有空格转的时候会报错(非法字符)。String replace = base64Str.replace(" ", "+");byte[] basebyte = java.util.Base64.getDecoder().decode(replace);String utf8Str = new String(basebyte, "utf-8");System.out.println("这是解码后的utf-8串:" + utf8Str);

这段代码的主要功能是将一个Base64编码的字符串中的空格替换为"+"号,然后进行Base64解码,最后将解码后的字节数组转换为UTF-8格式的字符串并输出。

  1. 使用**replace()**方法替换空格为"+“号。这里使用了正则表达式” "来匹配空格,因为Java的字符串操作中,空格是一个特殊字符,需要使用正则表达式来匹配。
  2. 使用**java.util.Base64.getDecoder().decode()**方法对替换后的Base64编码字符串进行解码。解码后的结果是一个字节数组。
  3. 使用**new String(basebyte, “utf-8”)**方法将解码后的字节数组转换为UTF-8格式的字符串。
  4. 输出解码后的字符串。

需要注意的是,这段代码中使用了Java的Base64类来进行Base64编码和解码。在使用Base64.getDecoder().decode()方法解码时,解码后的结果是一个字节数组,如果需要将其转换为字符串,需要使用String类的构造方法,如new String(basebyte, "utf-8")。

4.2 效果图

通过上述的代码进行解码,就可以还原编码前的json串,效果图如下所示:
在这里插入图片描述
注意:在从字节数组转换为String类型时,如果不加utf-8会出现乱码。


总结

Base64编码的优点是可读性好,可以方便地阅读和传输,同时可以加密数据,防止数据泄露。但是,由于Base64编码的编码长度比原始数据长度更长,所以可能会导致传输速度变慢。此外,Base64编码只能加密原始数据的比特位,不能加密原始数据的值。

在Java中,可以使用java.util.Base64类来进行Base64编码和解码。常用的方法包括:

  1. encode()方法:将原始数据转换为Base64编码的字符串。
  2. getEncoder()方法:获取一个Base64编码器,用于将数据转换为Base64编码的字符串。
  3. decode()方法:将Base64编码的字符串转换为原始数据。
  4. getDecoder()方法:获取一个Base64解码器,用于将Base64编码的字符串转换为原始数据。

在使用Base64编码和解码时,需要注意原始数据的类型(如字节数组、字符串等)和编码器的选择。

http://www.xdnf.cn/news/11769.html

相关文章:

  • php 能否制作图形,PHP制作 3D图形之自定义图形及矢量图[多图]
  • Wi-Fi 6(802.11ax)解析24:802.11ax中MU-MIMO和OFDMA的区别
  • 10个可爱的外国互动型网站
  • 免费3D模型网站大盘点,你推荐哪一个?
  • 俺常用的资源网站
  • 搭建 PHP 开发环境:详细步骤和示例代码
  • 使用Pano2VR实现全景图切换和平面图效果
  • Servlet系列:(HttpServletRequest、HttpServletResponse、ServletContext、ServletConfig)详解
  • 002java jsp SSM springboot医护人员排班系统(源码+文档+开题+运行视频+讲解视频)
  • CUDA开源 轻松跑AMD GPU/Intel x86 CPU
  • 3日行程安排
  • 特殊字符大全(只需这一文章)
  • 化妆品展示网页设计作业 静态HTML化妆品网站 DW美妆网站模板下载 大学生简单网页作品代码 个人网页制作 学生个人网页设计作业
  • 收藏几个代码自动生成器!尚未使用,不置可否。
  • 地址标准化服务AI深度学习模型推理优化实践
  • 图论基础算法
  • MyEclipse 8.0.0 in Fedora 12
  • 【最经典的79个】软件测试面试题(内含答案)
  • C++程序员常用工具集
  • 推荐学习法——思维导图
  • 海康机器人:工业相机SDK二次开发
  • 如何在MyEclipse下集成SVN详解
  • 嵌入式边缘计算软硬件开发实训室解决方案
  • 什么是企业邮箱
  • 12月24日火箭vs活塞视频在线直播视频
  • 离散数学编程作业(c++实现)
  • 树莓派详细介绍
  • MATLAB 实用命令及技巧整理
  • 算法——背包问题
  • 免费API数据接口