基于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的加密与解密操作的更多相关文章

  1. 利用java自带的base64实现加密、解密

    package com.stone.util; import java.io.UnsupportedEncodingException; import sun.misc.*; public class ...

  2. 【Java】通过DES加密和解密工具,对字符串进行加密和解密操作

    分享一个非常不错的字符串加密和解密的程序. 可以指定不同的密钥对同一字符串进行不同的加密操作,增强加密性能. Java代码如下: package com.app; import java.securi ...

  3. 【转】Java Cipher类 DES算法(加密与解密)

    Java Cipher类 DES算法(加密与解密) 1.加密解密类 import java.security.*; import javax.crypto.*; import java.io.*; / ...

  4. java base64编码 加密和解密(切记注意乱码问题)

    BASE64 编码是一种常用的字符编码,在很多地方都会用到.JDK 中提供了非常方便的 BASE64Encoder 和 BASE64Decoder,用它们可以非常方便的完成基于 BASE64 的编码和 ...

  5. Java Base64位加密和解密(包括其他加密参考)

    链接https://blog.csdn.net/longguangfu8/article/details/78948213 常用加密解密算法[RSA.AES.DES.MD5]介绍和使用 https:/ ...

  6. java独立小程序实现AES加密和解密

    一.需求: web项目中配置文件配置的密码是明文的, 现在需要修改成密文, 加密方式采用AES, 于是写了个工具类用于加密和解密. 又因为这个密码是由客户来最终确定, 所以为了部署时方便起见, 写了个 ...

  7. java与C#、.NET AES加密、解密 解决方案

      1.情景展示 Java提供的密钥,C#无法解密. 2.原因分析 在Java中,AES的实际密钥需要用到KeyGenerator 和 SecureRandom,但是C#和.NET 里面没有这2个类, ...

  8. MD5加密、时间戳转换、base64算法加密、解密

    #region MD5加密 /// <summary> /// MD5加密 /// </summary> /// <param name="str"& ...

  9. Java实现 LeetCode 535 TinyURL 的加密与解密(位运算加密)

    535. TinyURL 的加密与解密 TinyURL是一种URL简化服务, 比如:当你输入一个URL https://leetcode.com/problems/design-tinyurl 时,它 ...

随机推荐

  1. 处理flutter http请求添加application/json报错Cannot set the body fields of a Request with content-type “application/json”

    在flutter中在http请求发送时设置"content-type": "application/json"会出现报错Cannot set the body ...

  2. springboot发送邮件,以及携带邮件附件简单使用

    可以通过springboot官方文档中Sending Email,找到类似如下java mail的使用文档 https://docs.spring.io/spring/docs/5.1.9.RELEA ...

  3. 3.JSON使用

    把 JSON 文本转换为 JavaScript 对象 JSON 最常见的用法之一,是从 web 服务器上读取 JSON 数据(作为文件或作为 HttpRequest),将 JSON 数据转换为 Jav ...

  4. linux如何绑定域名和ip?

    答: 通过在/etc/hosts中添加条目,如下: <ip_address> <domain_name> 如: 11.11.11.11 www.baidu.com

  5. 【8583】ISO8583报文解析

    ISO8583报文(简称8583包)又称8583报文,是一个国际标准的包格式,最多由128个字段域组成,每个域都有统一的规定,并有定长与变长之分. [报文格式] POS终端上送POS中心的消息报文结构 ...

  6. UI布局属性大全

    第一类:属性值为true或false android:layout_centerHrizontal 水平居中 android:layout_centerVertical 垂直居中 android:la ...

  7. JVM源码分析之JDK8下的僵尸(无法回收)类加载器[z]

    [z]http://lovestblog.cn/blog/2016/04/24/classloader-unload/ 概述 这篇文章基于最近在排查的一个问题,花了我们团队不少时间来排查这个问题,现象 ...

  8. golang实现生产者消费者模型

    生产者消费者模型分析 操作系统中的经典模型,由若干个消费者和生产者,消费者消耗系统资源,生产者创造系统资源,资源的数量要保持在一个合理范围(小于数量上限,大约0).而消费者和生产者是通过并发或并行方式 ...

  9. Laravel的Nginx重写规则--让路由支持末尾加斜线

    默认laravel路由末尾不能加/,如果加了斜线会报404 要想支持url末尾的斜线需要在public/index.php加入如下代码: $_SERVER['REQUEST_URI'] = trim( ...

  10. svn本地文件颜色详解

    1.红色感叹号表示这个文件从服务器上下载下来以后,在本地被修改过.这时执行提交操作就可以了.2.黄色感叹号表示这个文件在提交的时候发现存在冲突,也就是说有别人在你提交之前对这个文件的同一个版本进行了修 ...