正常来讲加密基本上永远都要伴随着解密,所谓的加密或者解密,往往都需要有一些规则,在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. P5445 [APIO2019]路灯(树套树)

    P5445 [APIO2019]路灯 转化为平面上的坐标(x,y),set维护连续区间. 用树套树维护矩阵加法,单点查询. 注意维护矩阵差分的时候, $(x,y,v)$是对$(x,y)(n+1,n+1 ...

  2. 攻防世界--csaw2013reversing2

    测试文件:https://adworld.xctf.org.cn/media/task/attachments/3f35642056324371b913687e770e97e6.exe 1.准备 打开 ...

  3. Linux下svn回滚

    方法1: 用svn merge 1) 先 svn up,保证更新到最新的版本,如20: 2) 然后用 svn log ,查看历史修改,找出要恢复的版本,如10 .如果想要更详细的了解情况,可以使用sv ...

  4. 【记录】mysql 查看某数据库各个表容量大小SQL

    有时候我们可能需要了解数据库中各个表的容量及大小,好了解数据库情况. 现只需要一条SQL就可以直观的展示出来. SELECT table_schema AS '数据库', table_name AS ...

  5. openstack stein部署手册 1. 准备

    # 控制节点与计算节点,分别指定静态解析 /etc/hosts 192.168.123.201 controller 192.168.123.202 compute01 # 控制节点与计算节点,分别安 ...

  6. 01.Linux-CentOS系统网卡名称变动问题

    方法一root登陆系统1.删除原来的配置信息[root@localhost ~]# rm -f /etc/sysconfig/network-scripts/ifcfg-eth0[root@local ...

  7. Codeforces Round #392 (Div. 2) - A

    题目链接:http://codeforces.com/contest/758/problem/A 题意:给定N个城市的福利,国王现在想让每个城市的福利都一致.问最少需要花多少钱使得N个城市的福利值都一 ...

  8. linux安装jdk环境(多种方式)

    通过tar.gz压缩包安装 此方法适用于绝大部分的linux系统 1.先下载tar.gz的压缩包,这里使用官网下载. 进入: http://www.oracle.com/technetwork/jav ...

  9. 三、Angular项目,app.module.ts解析

    1. 项目主要文件存放的路径 2.app.module.ts模块解析 3.模块和组件关系 |--app.module.ts(模块) |--app.component.ts(组件)  |--app.co ...

  10. reids 持久化

    RDB: RDB是整个内存压缩过的Snapshot,RDB 的数据结构,可以配置符合的快照触发条件,默认如下 900s  1次修改 300s 10次修改 60s 10000 次修改 自动备份为dump ...