Java进阶开发-基于Base64的加密与解密操作
基于Base64的加密与解密操作
正常来讲加密基本上永远伴随着解密,所谓的加密或者解密往往都是需要有一些所谓的规则。在JDK1.8开始提供有一组新的加密处理操作,Base64处理。在这个类里面有两个内部类:
|
Base64.Encoder |
加密处理 |
public byte[] encode(byte[] src) |
|
Base64.Decoder |
解密处理 |
public byte[] decode(String src) |
·范例:实现加密与解密操作
import java.util.Base64;
public class Main {
public static void main(String[] args) {
String msg="hello,wanyu!";//要加密的信息
String encMsg;
String decMsg;
encMsg=new String(Base64.getEncoder().encode(msg.getBytes()));
decMsg=new String(Base64.getDecoder().decode(encMsg.getBytes()));
System.out.println(encMsg);
System.out.println(decMsg);
}
}
虽然Base64可以实现加密与解密的处理,但是其由于式一公版的算法,所以如果直接对数据进行加密往往并不安全,那么最好的做法是使用盐值操作。
·范例:盐值加密
import java.util.Base64;
public class Main {
public static void main(String[] args) {
String salt="Mufasa";
String msg="hello,wanyu!"+"{"+salt+"}";//要加密的信息
String encMsg;
String decMsg;
encMsg=new String(Base64.getEncoder().encode(msg.getBytes()));
decMsg=new String(Base64.getDecoder().decode(encMsg.getBytes()));
System.out.println(encMsg);
System.out.println(decMsg);
}
}
即便现在有盐值实际上发现加密效果也不是很好,最好的做法是多次加密。
·范例:基于Base64的自定义加密
import java.util.Base64;
class StringUtil{
private static final String SALT="Mufasa"; //公共的盐值
private static final int REPEAT = 3; //加密3次
/**
* 加密处理
* @param str 要加密的字符串,需要与盐值整合
* @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 Main {
public static void main(String[] args) {
String encStr=StringUtil.encode("hello,this is a Base64 code");
System.out.println(encStr);
String decStr=StringUtil.decode(encStr);
System.out.println(decStr);
}
}
其中盐值SALT、重复次数REPEAT自定义。最好的做法是使用2-3种加密程序,同时进行、同时找到一些完全不可解密的操作
Java进阶开发-基于Base64的加密与解密操作的更多相关文章
- 利用java自带的base64实现加密、解密
package com.stone.util; import java.io.UnsupportedEncodingException; import sun.misc.*; public class ...
- 【Java】通过DES加密和解密工具,对字符串进行加密和解密操作
分享一个非常不错的字符串加密和解密的程序. 可以指定不同的密钥对同一字符串进行不同的加密操作,增强加密性能. Java代码如下: package com.app; import java.securi ...
- 【转】Java Cipher类 DES算法(加密与解密)
Java Cipher类 DES算法(加密与解密) 1.加密解密类 import java.security.*; import javax.crypto.*; import java.io.*; / ...
- java base64编码 加密和解密(切记注意乱码问题)
BASE64 编码是一种常用的字符编码,在很多地方都会用到.JDK 中提供了非常方便的 BASE64Encoder 和 BASE64Decoder,用它们可以非常方便的完成基于 BASE64 的编码和 ...
- Java Base64位加密和解密(包括其他加密参考)
链接https://blog.csdn.net/longguangfu8/article/details/78948213 常用加密解密算法[RSA.AES.DES.MD5]介绍和使用 https:/ ...
- java独立小程序实现AES加密和解密
一.需求: web项目中配置文件配置的密码是明文的, 现在需要修改成密文, 加密方式采用AES, 于是写了个工具类用于加密和解密. 又因为这个密码是由客户来最终确定, 所以为了部署时方便起见, 写了个 ...
- java与C#、.NET AES加密、解密 解决方案
1.情景展示 Java提供的密钥,C#无法解密. 2.原因分析 在Java中,AES的实际密钥需要用到KeyGenerator 和 SecureRandom,但是C#和.NET 里面没有这2个类, ...
- MD5加密、时间戳转换、base64算法加密、解密
#region MD5加密 /// <summary> /// MD5加密 /// </summary> /// <param name="str"& ...
- Java实现 LeetCode 535 TinyURL 的加密与解密(位运算加密)
535. TinyURL 的加密与解密 TinyURL是一种URL简化服务, 比如:当你输入一个URL https://leetcode.com/problems/design-tinyurl 时,它 ...
随机推荐
- Arcgis python输出当前窗口
import arcpy mxd = arcpy.mapping.MapDocument("CURRENT") mxdfile=arcpy.GetParameterAsText(0 ...
- linux内核中有哪些子系统(框架)呢?
注意: 分析用的linux内核版本为5.1.3 1. RTC子系统 2. Remote Processor子系统 3. Remote Processor Message子系统 4. SCSI子系统 5 ...
- Java:基础知识点
1. 面向对象的特征 (1)封装:把过程和数据包围起来,对数据的访问只能通过已定义的界面.即现实世界可以被描绘成一系列完全自治.封装的对象,这些对象通过一个受保护的接口访问其他对象:(2)继承:是一种 ...
- ResourceUtils 创建资源目录工具类
package com.jcf.utilsdemo; import android.content.Context; import android.content.res.Resources; pub ...
- 1、DNS服务基础
w'indows上名称解析目录: C:\Windows\System32\drivers\etc https://jocent.me/2017/06/18/dns-protocol-principle ...
- NFS PersistentVolume(8)
一.部署nfs服务端: k8s-master 节点上搭建了 NFS 服务器 (1)安装nfs服务: yum install -y nfs-utils rpcbind vim /etc/exports ...
- ES安装的相关
es安装https://www.cnblogs.com/jingping/p/9448099.htmlhttps://blog.csdn.net/zhanyu1/article/details/880 ...
- MySQL数据库锁机制之MyISAM引擎表锁和InnoDB行锁详解
转 http://blog.csdn.net/hsd2012/article/details/51112009 转 http://blog.csdn.net/e421083458/article/de ...
- JavaScript中函数文档注释
/** 方法说明 * @method 方法名 * @for 所属类名 * @param{参数类型}参数名 参数说明 * @return {返回值类型} 返回值说明 */
- public static void main(String[] args) 是什么意思?
public static void main(String[] args),是java程序的入口地址,java虚拟机运行程序的时候首先找的就是main方法. 一.这里要对main函数讲解一下,参数S ...