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 时,它 ...
随机推荐
- js动态往对象里边添加一项
第一种方法let obj ={"name":"tom","age":16}let key = "id";let valu ...
- JVM | 分代垃圾回收策略的基本概念以及过程
一.为什么要分代 分代的垃圾回收策略,是基于这样一个事实:不同的对象的生命周期是不一样的.因此,不同生命周期的对象可以采取不同的收集方式,以便提高回收效率. 在Java程序运行的过程中,会产生大量的对 ...
- matlab gui界面设计记录
我们要进行的程序是彩色图像处理试验示例,用这个程序来练习我们的gui前台设计. 程序功能介绍:具有彩色图像处理及保存和音乐播放功能效果如下图 2 在MATLAB的命令窗口中输入guide命令,打开gu ...
- Sublime text3中文版 无法安装插件There are no packages available for installation问题的解决。
说起来差点没被气死,我当时的情况已经是要疯了,连他们的域名都ping不通,我还想着,咋地,要倒闭了? 首选项->插件设置->Package Control->默认 里边的这个配置项 ...
- Android数据存储的方式
1. 内部存储 * 路径: /data/data/包名/ * cache用于存储临时文件,系统内存不足时,清除缓存数据 * files用于存储重要的文件,要用户手动在应用程序列表清 ...
- 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_4-3.登录检验JWT实战之封装通用方法
笔记 3.登录检验JWT实战之封装通用方法 讲解:引入相关依赖并开发JWT工具类 1.加入相关依赖 <!-- JWT相关 --> <dependenc ...
- [CDH] Redis: Remote Dictionary Server
基本概念 一.安装 Redis: Remote Dictionary Server 远程字典服务 使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种 ...
- Mybatis 联合查询XML与注解对比
由于是练习,故只做了感兴趣的一部分测试. 测试类容XML配置转注解方式 实体类为了测试请忽略设计是否合理… User.java @Alias("User")public class ...
- Vue 子组件与子组件之间传值
可以借用公共父元素.子组件A this.$emit("eventName", data) 触发事件,父组件监听事件,更改父组件 data , 通过Props 传值到子组件B,子组 ...
- 不可不知的JavaScript 之 JSON对象和JavaScript对象直接量
JSON对象和JS对象直接量 在工作当中,我们总是可以听到人说将数据转换为JSON对象,或者说把JSON对象转换为字符串之类的话,下面是关于JSON的具体说明. JSON对象并不是JavaScript ...