Base64加密工具
正常来讲加密基本上永远都要伴随着解密,所谓的加密或者解密,往往都需要有一些规则,在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加密工具的更多相关文章
- Base64加密工具-iBlogs
简易的Base64加密工具开发步骤 1.编写Java测试桩 import java.io.BufferedReader; import java.io.IOException; import java ...
- java中Base64的加密工具封装
Base64加密作为最简单普遍的加密方式(其实只能称为编码方式),应用场景众多比如秘钥,安全证书,也应用在其他的加密方式中或与其他加密方式进行嵌套使用 可以通过引用sun.misc来使用,也可以自己手 ...
- 使用jframe编写一个base64加密解密工具
该工具可以使用exe4j来打包成exe工具(如何打包自己百度) 先上截图功能 运行main方法后,会弹出如下窗口 输入密文 然后点击解密,在点格式化 代码分享 package tools;import ...
- Base64加密解密工具类
使用Apache commons codec类Base64进行加密解密 maven依赖 <dependency> <groupId>commons-codec</grou ...
- App开发流程之加密工具类
科技优家 2016-09-08 18:10 从这篇记录开始,记录的都算是干货了,都是一些编程日常的积累. 我建议先将基础的工具加入项目,后续的开发效率会呈指数增长.如果在专注功能开发过程中,才发现缺少 ...
- 主题:Android、iPhone和Java三个平台一致的加密工具
先前一直在做安卓,最近要开发iPhone客户端,这其中遇到的最让人纠结的要属Java.Android和iPhone三个平台加解密不一致的问题.因为手机端后台通常是用JAVA开发的Web Service ...
- 加密工具类 - CryptoUtils.java
加密工具类,包含MD5,BASE64,SHA,CRC32的加密与解密方法. 源码如下:(点击下载 - CryptoUtils.java.commons-io-2.4.jar.commons-code ...
- Android、iPhone和Java三个平台一致的加密工具
先前一直在做安卓,最近要开发iPhone客户端,这其中遇到的最让人纠结的要属Java.Android和iPhone三个平台加解密不一致的问题. 因为手机端后台通常是用JAVA开发的Web Servic ...
- cryptopp开源库的使用(二):base64加密
很多时候我只是优秀工具的使用者,优秀的工具用好了才能发挥作用 最近使用cryptopp的base64对压缩后的zip文件内容进行加密遇到了问题. 首先zip压缩没问题,可是最后得到的base64字符串 ...
随机推荐
- day64--pymysql模块的使用、视图、触发器、函数、存储过程、事务
一.pymysql的下载和使用 (一)pymysql模块的下载:pip3 install pymysql # 实现:使用Python实现用户登录,如果用户存在则登录成功(假设该用户已在数据库中) im ...
- differential evolution代码实例(DE算法)
DE算法是遗传算法中一种比较流行的算法,这种算法比较简单,速度也比较快,下面给出一份示例代码 clear all; close all; clc 2 %Function to be minimized ...
- Css中的!important
转载自:https://www.cnblogs.com/cang12138/p/7326280.html !important为开发者提供了一个增加样式权重的方法,比直接在元素的 style 属性中设 ...
- xcode 5.0 连接svn error -(NSURLErrorDomain error -1012)
xcode 5.0连接 svn server, check out时出现如下error : The operation couldn’t be completed. (NSURLErrorDomain ...
- Win10电脑查看已连接过WiFi密码的命令
运行中输入CMD,回车,打开命令行窗口. 输入:netsh wlan show profiles 执行后,会列出搜友已连接过的WiFi名字: 输入:netsh wlan show profile ...
- Linux 下源码安装ngnix
版本说明: NGINX 版本1.12.0 pcre-8.40 zlib-1.2.11 openssl-1.1.0i 安装过程 # ./configure --prefix=/usr/ngnix ...
- python 利用subprocess调用cmd命令程序,并正确输出控制台的输出中文
平台Python3.7 1.利用控制台运行程序后在控制台会输出中文提示,但是用python调用subprocess.run函数后返回的输出是乱码,于是,解决方法是用subprocess.check_o ...
- uCOS的软件定时器、uCOS时钟节拍和滴答定时器的关系
uCOS2.81后的版本中有软件定时器的概念,如果要开启定时器任务,需要在OS_CFG.H文件中 #define OS_TMR_EN 1 软件定时器其实跟硬件中断是相 ...
- React、Redux、React-Redux学习
React 是什么 用脚本进行DOM操作的代价很昂贵.有个贴切的比喻,把DOM和JavaScript各自想象为一个岛屿,它们之间用收费桥梁连接,js每次访问DOM,都要途径这座桥,并交纳"过 ...
- 【leetcode】905. Sort Array By Parity
题目如下: 解题思路:本题和[leetcode]75. Sort Colors类似,但是没有要求在输入数组本身修改,所以难度降低了.引入一个新的数组,然后遍历输入数组,如果数组元素是是偶数,插入到新数 ...