基于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. cmd ora-12560协议适配器错误

    这个问题我解决了很久,其实问题的关键在于我在本机安装了一个Oracle11g数据库以及安装了一个Oracle Client,导致在使用sqlplus / as sysdba链接时出现报协议适配器的错误 ...

  2. koa 允许跨域

    1.安装模块 npm install koa2-cors --save 2.引用 const cors = require('koa2-cors'); ... // 允许跨域访问 app.use(co ...

  3. VC++实现标准型计算器步骤及源码

    VC++实现标准型计算器步骤及源码 2013年06月19日 09:48:47 无敌的成长日记 阅读数:4686       最近一段时间一直在做这个东西,刚刚拿到题目的时候认为这是一个简单的程序,可是 ...

  4. 使用pyinstaller 打包python程序

    1.打开PyCharm的Terminal,使用命令pip install pyinstaller安装pyinstaller 2.打包命令:pyinstaller --console --onefile ...

  5. js-xlsx

    XLSX.read(data, {type: type}); type主要取值如下: base64: 以base64方式读取: binary: BinaryString格式(byte n is dat ...

  6. 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_2-2.快速搭建SpringBoot项目,采用IDEA

    笔记 2.快速搭建SpringBoot项目,采用IDEA     简介:使用SpringBoot start在线生成项目基本框架并导入到IDEA中 参考资料:         IDEA使用文档    ...

  7. 模型压缩-Learning Efficient Convolutional Networks through Network Slimming

    Zhuang Liu主页:https://liuzhuang13.github.io/ Learning Efficient Convolutional Networks through Networ ...

  8. ASP.NET Core 入门笔记8,ASP.NET Core MVC 分部视图入门

    一.前言 1.本教程主要内容 ASP.NET Core MVC (Razor)分部视图简介 ASP.NET Core MVC (Razor)分部视图基础教程 ASP.NET Core MVC (Raz ...

  9. 【Gym - 100923I】Por Costel and the Pairs(思维题)

    Por Costel and the Pairs Descriptions 有T组测试样例 有n个男的,n个女的,第i个人都有为当前一个大小为i的懒惰值,当一男一女懒惰值的乘积<=n他们就就可以 ...

  10. nginx负载均衡高可用部署和代理配置

    nginx负载均衡高可用配置 服务器A:172.16.100.2 服务器B:172.16.100.3 首先先在两台服务器上分别安装好nginx和keepalived后,再进行下面的操作 配置keepa ...