正常来讲加密基本上永远都要伴随着解密,所谓的加密或者解密,往往都需要有一些规则,在JDK1.8开始,提供有新的加密处理操作类,Base64处理类
--Base64类
  在该类之中存在两个内部类:Base64.Base64.Decoder以及Base64.enBase64.Encoder,分别进行加密和解密处理
进行加密处理:byte[] decode(byte[] src)  
进行解密处理:byte[] encode(byte[] src)  
--范例:进行数据加密示例

 public class MyBase64 {
public static void main(String[] args) {
String message = "你好,这是一条消息"; //要发送的消息内容
Base64.getEncoder().encode(message.getBytes()); //数据加密
System.out.println(new String(Base64.getEncoder().encode(message.getBytes())));
}
}

--运行结果

5L2g5aW9LOi/meaYr+S4gOadoea2iOaBrw==

Process finished with exit code 0

--进行解密操作

public class MyBase64 {
public static void main(String[] args) {
String message = "你好,这是一条消息"; //要发送的消息内容
String encoder = new String(Base64.getEncoder().encode(message.getBytes()));//数据加密
String decode = new String(Base64.getDecoder().decode(encoder));
System.out.println(decode);
}
}

--我们知道Base64是一个公版的加密和解密算法,所以直接使用Base64进行数据的加密和解密并不安全,所以最好的做法是使用盐值操作,所谓盐值操作就是在所需要加密的字符串信息中追加一个盐值

 public class MyBase64 {
public static void main(String[] args) {
String salt = "dnsaojnui"; //无序输入的盐值
String message = "你好,这是一条消息" + "{" + salt + "}"; //要发送的消息内容
String encoder = new String(Base64.getEncoder().encode(message.getBytes()));//数据加密
String decode = new String(Base64.getDecoder().decode(encoder));
System.out.println(decode);
}
}

--但是盐值任然是明文规定的,这样实际效果也并不是很好,最好的做法则是多次加密

 package 常用类库.base64加密与解密;

 import java.util.Base64;

 /**
* @author : S K Y
* @version :0.0.1
*/
class BaseUtil { //加密的盐值与此处对外不公布
private static final String SALT = "dasjidnas"; //公版的盐值
private static final int REPEAT = 5; ///加密的次数 /**
* 加密处理
*
* @param password 要加密的字符串密码数据,需要与盐值配合
* @return 加密后的数据
*/
public static String encode(String password) {
password = password + "{" + SALT + "}";
byte[] bytes = password.getBytes();
for (int i = 0; i < REPEAT; i++) {
bytes = Base64.getEncoder().encode(bytes);
}
return new String(bytes);
} /**
* 解密
*
* @param needDecode 需要解密的数据
* @return 解密的结果
*/
public static String decode(String needDecode) {
byte[] bytes = needDecode.getBytes();
for (int i = 0; i < REPEAT; i++) {
bytes = Base64.getDecoder().decode(bytes);
}
return new String(bytes).replaceAll("\\{\\w+}", "");
}
} public class MyBase64 {
public static void main(String[] args) {
String password = "qwer123456";
String encode = BaseUtil.encode(password);
System.out.println(encode);
System.out.println(BaseUtil.decode(encode));
}
}

--运行结果

VjFSR2IyRXlTa2hVYmtaVFYwZDRUMXBYZUVabFJsSjBUbFJDYUUxWGVGcFdSelZIWVVaWmVGTnFSbGhXYldoUVZERkZPVkJSUFQwPQ==
qwer123456 Process finished with exit code 0

--此外,最好的方法是使用2-3中加密算法,同时得到一些完全不可解密的加密结果

Base64加密工具的更多相关文章

  1. Base64加密工具-iBlogs

    简易的Base64加密工具开发步骤 1.编写Java测试桩 import java.io.BufferedReader; import java.io.IOException; import java ...

  2. java中Base64的加密工具封装

    Base64加密作为最简单普遍的加密方式(其实只能称为编码方式),应用场景众多比如秘钥,安全证书,也应用在其他的加密方式中或与其他加密方式进行嵌套使用 可以通过引用sun.misc来使用,也可以自己手 ...

  3. 使用jframe编写一个base64加密解密工具

    该工具可以使用exe4j来打包成exe工具(如何打包自己百度) 先上截图功能 运行main方法后,会弹出如下窗口 输入密文 然后点击解密,在点格式化 代码分享 package tools;import ...

  4. Base64加密解密工具类

    使用Apache commons codec类Base64进行加密解密 maven依赖 <dependency> <groupId>commons-codec</grou ...

  5. App开发流程之加密工具类

    科技优家 2016-09-08 18:10 从这篇记录开始,记录的都算是干货了,都是一些编程日常的积累. 我建议先将基础的工具加入项目,后续的开发效率会呈指数增长.如果在专注功能开发过程中,才发现缺少 ...

  6. 主题:Android、iPhone和Java三个平台一致的加密工具

    先前一直在做安卓,最近要开发iPhone客户端,这其中遇到的最让人纠结的要属Java.Android和iPhone三个平台加解密不一致的问题.因为手机端后台通常是用JAVA开发的Web Service ...

  7. 加密工具类 - CryptoUtils.java

    加密工具类,包含MD5,BASE64,SHA,CRC32的加密与解密方法. 源码如下:(点击下载  - CryptoUtils.java.commons-io-2.4.jar.commons-code ...

  8. Android、iPhone和Java三个平台一致的加密工具

    先前一直在做安卓,最近要开发iPhone客户端,这其中遇到的最让人纠结的要属Java.Android和iPhone三个平台加解密不一致的问题. 因为手机端后台通常是用JAVA开发的Web Servic ...

  9. cryptopp开源库的使用(二):base64加密

    很多时候我只是优秀工具的使用者,优秀的工具用好了才能发挥作用 最近使用cryptopp的base64对压缩后的zip文件内容进行加密遇到了问题. 首先zip压缩没问题,可是最后得到的base64字符串 ...

随机推荐

  1. spring(二):bean的生命周期

    bean的生命周期指的是bean的创建——>初始化——>销毁的过程,该过程是由spring容器进行管理的 我们可以自定义bean初始化和销毁的方法:容器在bean进行到当前生命周期时,调用 ...

  2. html的q标签、blockquote标签

    九层之台,起于垒土 一.<q> 定义和用法 <q> 标签定义短的引用.浏览器经常在引用的内容周围添加引号. <html> <body> <p> ...

  3. REVOKE - 删除访问权限

    SYNOPSIS REVOKE [ GRANT OPTION FOR ] { { SELECT | INSERT | UPDATE | DELETE | RULE | REFERENCES | TRI ...

  4. Windows server 2012/2016系统安装zabbix3.2客户端

    一.       上传zabbix客户端文件 将zabbix_agents_3.2.0.win.zip文件上传至服务器的指定路径. 二.       解压并修改相关信息 解压已上传的客户端文件,在co ...

  5. python socket 的理解(1)

    前言 socket的用法简单,但里面的概念有点模糊,记录自己本人的一点理解. socket层结构图 注意,从此图中看出socket处于tcp和应用层之间.那么它代表啥意思呢?简明的说,数据的传输都是底 ...

  6. gradlew compileDebug --stacktrace -info

    gradlew compileDebug --stacktrace -info 在命令行中进入项目的根目录,或者可以在Android studio的Terminal中直接操作也可以,然后敲入一个命令: ...

  7. Flutter的flutter_calendar日曆的使用

    效果: 添加依賴: flutter_calendar: ^0.0.1 項目中導入 import 'package:flutter_calendar/flutter_calendar.dart'; 例子 ...

  8. Uva10491 Cows and Cars 【迁移自洛谷博客】

    题目大意 假设有a头牛,b辆车(门的总数为a+b),你先选一个门,然后你最终选择前主持人会替你打开C扇有牛的门(不会打开你已经选择的门),问你要不要换门,输出"总是换门"的策略下, ...

  9. Linux自用指令——2019年10月23日

    1.ls ls命令是列出目录内容(List Directory Contents)的意思.运行它就是列出文件夹里的内容,可能是文件也可能是文件夹. ls -a 列出目录所有文件,包含以.开始的隐藏文件 ...

  10. Linux用户登出之后保持后台进程(nohup)

    使用&可以将进程置于后台,但是用户从Shell登出之后,进程会自动结束.想要在登出之后保持进程运行,就要结合nohup命令使用. 例如: nohup find -size +100k > ...