使用Base64实现信息加密传输 | 带你学《Java语言高级特性》之三十四

简介: 在实际场景中经常会有数据通信事件,而对于某些对安全性要求比较高的需求,简单的数据传输是不够用的,本节将为读者介绍使用Base64加密解密数据的方法。

上一篇:手把手教你创建定时任务 | 带你学《Java语言高级特性》之三十三
在实际场景中经常会有数据通信事件,而对于某些对安全性要求比较高的需求,简单的数据传输是不够用的,本节将为读者介绍使用Base64加密解密数据的方法。

【本节目标】
通过阅读本节内容,你将对数据加密解密工作有一个初步的认识,并能够使用Base64结合附加盐值、多层加密解密等技巧实现对数据的简单加密。

Base64加密工具

正常来讲加密基本上永远都要伴随着解密,所谓的加密或者是解密往往都需要有一些规则。在JDK1.8开始提供有一组新的加密处理操作类,Base64处理。在这个类里面有两个内部类:

Base64.Encoder:进行加密处理;
  |- 加密处理:public byte[] encode(byte[] src);
Base64.Decoder:进行解密处理;
  |- 解密处理:public byte[] decode(byte[] src);

范例:实现加密与解密操作

import java.util.Base64;
public class JavaAPIDemo {
    public static void main(String[] args) throws Exception {
        String msg="www.mldn.cn";   //要发送的信息
        String encMsg=new String(Base64.getEncoder().encode(msg.getBytes()));   //数据加密
        System.out.println(encMsg);  //d3d3Lm1sZG4uY24=
        String oldMsg=new String(Base64.getDecoder().decode(encMsg));
        System.out.println(oldMsg);   //www.mldn.cn
    }
}

虽然Base64可以实现加密与解密的处理,但是其由于是一个公版的算法,所以如果直接对数据进行加密往往并不安全,所以最好的做法是使用盐值操作。

import java.util.Base64;
public class JavaAPIDemo {
    public static void main(String[] args) throws Exception {
        String salt = "mldnjava";  //盐值
        String msg = "www.mldn.cn" + "{" + salt + "}"; //要发送的信息
        String encMsg = new String(Base64.getEncoder().encode(msg.getBytes()));   //数据加密
        System.out.println(encMsg);  //d3d3Lm1sZG4uY257bWxkbmphdmF9
        String oldMsg = new String(Base64.getDecoder().decode(encMsg));
        System.out.println(oldMsg);    //www.mldn.cn{mldnjava}
    }
}

即便现在有盐值实际上发现加密的效果也不是很好,最好的做法是多次加密。
范例:复杂加密

import java.util.Base64;
class StringUtil{
    private static final String SALT="mldnjava";//公共的盐值,不对外暴露,一旦使用不可更改
    private static final int REPEAT=5;//加密次数:5次
    /**
     * 加密处理
     * @param str 要加密的字符串,需要与盐值整合
     * @param repeat 加密的重复次数
     * @return 加密后的数据
     */
    public static String encode(String str){    //加密处理
        String temp=str+"{" + SALT + "}";    //盐值对外不公布
        byte data []=temp.getBytes();   //将字符串变为字节数组
        for (int x = 0; x < REPEAT; x ++) {
            data=Base64.getEncoder().encode(data);   //重复加密
        }
        return new String(data);
    }
    /**
     * 解密处理
     * @param str 要解密的内容
     * @return 解密后的原始数据
     */
    public static String decode(String str){//解密处理
        byte data []=str.getBytes();  //将字符串变为字节数组
        for (int x = 0; x < REPEAT; x++) {
            data=Base64.getDecoder().decode(data);
        }
        return new String(data).replaceAll("\\{\\w+\\}","");
    }
}
public class JavaAPIDemo {
    public static void main(String[] args) throws Exception {
        String str=StringUtil.encode("www.mldn.cn");
        System.out.println(str);   //VjJ0U1QyRXdNSGRsU0ZKT1YwVTFhRlZ1Y0ZOTlZtUlZVMVJHVDAxcmNGbGFWV1F3WVZkS1dWRnRPV0ZTZWtaSVZERkZPVkJSUFQwPQ==
        System.out.println(StringUtil.decode(str));   //www.mldn.cn
    }
}

最好的做法就是使用2-3种加密程序,同时再找到一些完全不可解密的加密算法。

想学习更多的Java的课程吗?从小白到大神,从入门到精通,更多精彩不容错过!免费为您提供更多的学习资源。
本内容视频来源于阿里云大学

下一篇:揭开比较器的神秘面纱 | 带你学《Java语言高级特性》之三十五
更多Java面向对象编程文章查看此处

相关文章
|
3天前
|
存储 安全 Java
"Java编码魔法:揭秘图片与文件的Base64神秘转换术,让数据在指尖跳跃!"
【8月更文挑战第16天】Base64编码在Java开发中常用于将二进制数据如图片转换为ASCII字符串以便传输。编码使用64个字符及等号填充,每3字节数据编码为4个字符。Java利用`java.util.Base64`类实现此功能:读取图片或文件为字节数组后进行编码。解码时将Base64字符串还原为字节数组并写入文件。需注意编码效率降低、不提供安全性及特殊字符兼容性等问题。掌握这些技巧有助于解决Web开发中的数据传输需求。
16 4
|
3天前
|
存储 算法 Java
在Java中使用MD5对用户输入密码进行加密存储、同时登录验证。
这篇文章详细介绍了在Java项目中如何使用MD5算法对用户密码进行加密存储和登录验证,包括加入依赖、编写MD5工具类、注册时的密码加密和登录时的密码验证等步骤,并通过示例代码和数据库存储信息展示了测试效果。
在Java中使用MD5对用户输入密码进行加密存储、同时登录验证。
|
5天前
|
数据采集 机器学习/深度学习 前端开发
Java爬虫中的数据清洗:去除无效信息的技巧
Java爬虫中的数据清洗:去除无效信息的技巧
|
4天前
|
存储 Java
数据结构中的哈希表(java实现)利用哈希表实现学生信息的存储
这篇文章通过Java代码示例展示了如何实现哈希表,包括定义结点类、链表类、数组存储多条链表,并使用简单的散列函数处理冲突,以及如何利用哈希表存储和查询学生信息。
数据结构中的哈希表(java实现)利用哈希表实现学生信息的存储
|
5天前
|
存储 Java
数据结构中的哈希表(java实现)利用哈希表实现学生信息的存储
这篇文章通过Java代码示例展示了如何实现哈希表,包括定义结点类、链表类、数组存储多条链表,并使用简单的散列函数处理冲突,以及如何利用哈希表存储和查询学生信息。
数据结构中的哈希表(java实现)利用哈希表实现学生信息的存储
|
19天前
|
缓存 网络协议 算法
(二)Java网络编程之爆肝HTTP、HTTPS、TLS协议及对称与非对称加密原理!
作为一名程序员,尤其是Java程序员,那必须得了解并掌握HTTP/HTTPS相关知识。因为在如今计算机网络通信中,HTTP协议的作用功不可没,无论是日常上网追剧、冲���、亦或是接口开发、调用等,必然存在HTTP的“影子”在内。尤其对于WEB开发者而言,HTTP几乎是每天会打交道的东西。
45 10
|
4天前
|
安全 Nacos 数据安全/隐私保护
【技术干货】破解Nacos安全隐患:连接用户名与密码明文传输!掌握HTTPS、JWT与OAuth2.0加密秘籍,打造坚不可摧的微服务注册与配置中心!从原理到实践,全方位解析如何构建安全防护体系,让您从此告别数据泄露风险!
【8月更文挑战第15天】Nacos是一款广受好评的微服务注册与配置中心,但其连接用户名和密码的明文传输成为安全隐患。本文探讨加密策略提升安全性。首先介绍明文传输风险,随后对比三种加密方案:HTTPS简化数据保护;JWT令牌减少凭证传输,适配分布式环境;OAuth2.0增强安全,支持多授权模式。每种方案各有千秋,开发者需根据具体需求选择最佳实践,确保服务安全稳定运行。
16 0
|
4天前
|
Java C# 数据安全/隐私保护
如何 使 Java、C# md5 加密的值保持一致
如何 使 Java、C# md5 加密的值保持一致
5 0
|
4天前
|
Java
Java 图片、文件 Base64 互转
Java 图片、文件 Base64 互转
10 0
|
6天前
|
Java
jsp和java的结合使用显示学生信息
通过JavaBean封装学生信息,并利用JSP展示。`Student`类定义了学生属性与操作方法。JSP页面通过脚本创建学生对象、填充数据至列表,并遍历输出。实现了学生基本信息的动态展示。