java必懂的冷知识点之Base64加密与解密

为了安全地进行数据传输,就需要对数据进行加密与解密操作,Base64就是Java提供的加密处理器。本博客主要讲解Base64工具类的使用以及加密和解密信息操作实现。

Base64是一种直接利用64个可打印字符来表示二进制数据的算法,也是网络传输中较为常见的一种加密算法。从JDK1.8版本开始提供java.util.Base64的工具类,同时提供了两个Base64的内部类实现数据加密与解密操作。

【数据加密】java.util.Base64.Encoder, 对象获取方法:public static Base64.Encoder getEncoder()。数据加密处理:public byte[] encoder(byte[] src)。

【数据解密】java.util.Base64.Decoder, 对象获取方法:public static Base64.Decoder getDecoder()。
数据解密处理:public byte[] decoer (String src)。

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

package cn.mldn.demo;
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);    //输出密文
   String oldMsg=new String(Base64.getDecoder().decode(encMsg)); //数据解密
   System.out.println(oldMsg); //输出明文
  }
}

程序执行结果:
d3d3Lm1sZG4uY24=(密文)
www.mldn.cn(明文)

本程序直接利用Base64提供的方法获取了Base64.Encoder与Base64.Decoder实例化对象,并且对原始数据进行了加密与解密处理。但需要注意的是,由于Base64属于JDK的原始实现,所以单纯地加密是不安全的,此时为了获取更加安全的数据加密操作,可以利用盐值(salt)、自定义格式以及多次加密的方式来保证项目中的数据安全。

### 范例:基于Base64定义复杂加密与解密操作

package cn.mldn.demo;
import java.util.Base64;

class StringUtil
{
	private static final String SALT="mldnjava"; //公共的盐值
	private static final int REPEAT=5;  //加密次数

	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);  //返回加密后的内容
	}

	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(StringUtil.decode(str));
 }

}

本程序基于Base64类的功能实现了一个自定义加密与解密程序,为了保证加密后的数据安全,采用的盐值格式为“盐值{原始数据}”,同时利用多次加密的形式确保了密文数据的可靠性。在实际开发中只要不对外公布盐值内容和加密次数就可以在较为安全的环境下进行数据传输.

到此这篇关于java必懂的冷知识点之Base64加密与解密的文章就介绍到这了,更多相关java Base64加密与解密内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Java RSA加密解密实现方法分析【附BASE64 jar包下载】

    本文实例讲述了Java RSA加密解密实现方法.分享给大家供大家参考,具体如下: 该工具类中用到了BASE64,需要借助第三方类库:javabase64-1.3.1.jar javabase64-1.3.1.jar 本站下载地址. 注意: RSA加密明文最大长度117字节,解密要求密文最大长度为128字节,所以在加密和解密的过程中需要分块进行. RSA加密对明文的长度是有限制的,如果加密数据过大会抛出如下异常: Exception in thread "main" javax.cryp

  • 基于Java实现的Base64加密、解密原理代码

    一.概述 1.Base64是什么: Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,大家可以查看RFC2045-RFC2049,上面有MIME的详细规范.Base64编码可用于在HTTP环境下传递较长的标识信息.例如,在Java Persistence系统Hibernate中,就采用了Base64来将一个较长的唯一标识符(一般为128-bit的UUID)编码为一个字符串,用作HTTP表单和HTTP GET URL中的参数.在其他应用程序中,也常常需要把二进制数据编码为适合放在

  • java常用工具类之DES和Base64加密解密类

    一.DES加密和解密 package com.itjh.javaUtil; import java.io.UnsupportedEncodingException; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import java.security.spec.InvalidKeySpecExc

  • java实现Base64加密解密算法

    Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,大家可以查看RFC2045-RFC2049,上面有MIME的详细规范.Base64编码可用于在HTTP环境下传递较长的标识信息.例如,在Java Persistence系统Hibernate中,就采用了Base64来将一个较长的唯一标识符(一般为128-bit的UUID)编码为一个字符串,用作HTTP表单和HTTP GET URL中的参数.在其他应用程序中,也常常需要把二进制数据编码为适合放在URL(包括隐藏表单域)中的形式.

  • java使用Base64实现文件加密解密

    本文实例为大家分享了Java实现Base64给文件加密.解密的具体代码,供大家参考,具体内容如下 package test.base64; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import sun.misc.BASE64Decoder;

  • java利用Apache commons codec进行MD5加密,BASE64加密解密,执行系统命令

    编写代码之前先来介绍一下我们要用到的两个包; commons-codec-1.10.jar Commons项目中用来处理常用的编码方法的工具类包,例如DES.SHA1.MD5.Base64,URL,Soundx等等. commons-exec-1.3.jar Apache Commons Exec 是 Apache 上的一个 Java 项目,提供一些常用的方法用来执行外部进程 你可以到本站直接下载 Apache Commons 官方包 下面看一下代码结构: import org.apache.c

  • java必懂的冷知识点之Base64加密与解密

    为了安全地进行数据传输,就需要对数据进行加密与解密操作,Base64就是Java提供的加密处理器.本博客主要讲解Base64工具类的使用以及加密和解密信息操作实现. Base64是一种直接利用64个可打印字符来表示二进制数据的算法,也是网络传输中较为常见的一种加密算法.从JDK1.8版本开始提供java.util.Base64的工具类,同时提供了两个Base64的内部类实现数据加密与解密操作. [数据加密]java.util.Base64.Encoder, 对象获取方法:public stati

  • C#编写的Base64加密和解密类

    这个C#类是一个基于Base64的加密和解密类,用户可以可以使用默认的秘钥进行加密.解密,也可以自己设定秘钥进行加密和解密,非常实用 代码一:非常精简的代码 /// <summary> /// Base64加密,解密方法 /// </summary> /// <paramname="s">输入字符串</param> /// <paramname="c">true-加密,false-解密</param&

  • python3.x实现base64加密和解密

    用python3.x实现base64加密和解密,供大家参考,具体内容如下 加密 base64_encrypt.py #!/usr/bin/python3 #encoding:utf-8 import base64 var = 1 while var==1: str_encrypt=input("输入要加密的字符串:\n"); base64_encrypt = base64.b64encode(str_encrypt.encode('utf-8')) print("BASE64

  • java.lang.Runtime.exec() Payload知识点详解

    有时,通过Runtime.getRuntime().exec()执行命令的有效负载有时会失败.使用Web Shell,反序列化利用或通过其他媒介时,可能会发生这种情况. 有时这是因为重定向和管道字符的使用在启动过程的上下文中没有意义.例如,在shell中执行ls> dir_listing会将当前目录的列表输出到名为dir_listing的文件中.但是在exec()函数的上下文中,该命令将被解释为获取>和dir_listing目录的列表. 有时,StringTokenizer类会破坏其中包含空格

  • java必学必会之线程(2)

    一.线程的优先级别 线程优先级别的使用范例: package cn.galc.test; public class TestThread6 { public static void main(String args[]) { MyThread4 t4 = new MyThread4(); MyThread5 t5 = new MyThread5(); Thread t1 = new Thread(t4); Thread t2 = new Thread(t5); t1.setPriority(Th

  • java JVM原理与常识知识点

    JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的.Java虚拟机包括一套字节码指令集.一组寄存器.一个栈.一个垃圾回收堆和一个存储方法域. JVM屏蔽了与具体操作系统平台相关的信息,使Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行.JVM在执行字节码时,实际上最终还是把字节码解释成具体平台上的机器指令执行. 1.

随机推荐