当前位置:网站首页>用户密码加密工具
用户密码加密工具
2022-08-03 04:35:00 【Dzooooone_】
加密类
import org.apache.commons.codec.binary.Base64;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
public class CryptoUtil {
//加密算法
private static final String DESede_ALGORITHM = "DESede";
//加盐
private static final String KEY = "xxxx";
/**
* 文本加密
*
* @param plain 待加密文本
* @return
* @throws Exception
*/
public static final String encrypt(String plain) {
byte[] newKeys = getKeys(KEY);
try {
SecretKey secureKey = new SecretKeySpec(newKeys, DESede_ALGORITHM);
Cipher cipher = Cipher.getInstance(DESede_ALGORITHM);
cipher.init(1, secureKey);
byte[] encrypted = cipher.doFinal(plain.getBytes());
return new String(Base64.encodeBase64(encrypted));
} catch (Exception e) {
return null;
}
}
/**
* 密码解密
*
* @param cryptograph 待解密密码
* @return
* @throws Exception
*/
public static final String decrypt(String cryptograph) {
byte[] newKeys = getKeys(KEY);
byte[] encrypted = Base64.decodeBase64(cryptograph.getBytes());
try {
SecretKey secureKey = new SecretKeySpec(newKeys, DESede_ALGORITHM);
Cipher cipher = Cipher.getInstance(DESede_ALGORITHM);
cipher.init(2, secureKey);
byte[] cryptoGraphs = cipher.doFinal(encrypted);
return new String(cryptoGraphs);
} catch (Exception e) {
return null;
}
}
private static byte[] getKeys(String key) {
byte[] oldKeys = KEY.getBytes();
byte[] newKeys = new byte[24];
for (int i = 0; i < oldKeys.length && i != 24; i++)
newKeys[i] = oldKeys[i];
return newKeys;
}
public static void main(String[] args) throws Exception {
System.out.println(CryptoUtil.encrypt("xxxxxx"));
System.out.println(CryptoUtil.decrypt("gySSNZWJIyQ="));
System.out.println(CryptoUtil.decrypt("/4lOgQ80Y9LVB69nhkR1tA=="));
}
}
对用户密码先进行加密后再入库
jwt依赖
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-impl</artifactId>
<version>${jjwt.version}</version>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-jackson</artifactId>
<version>${jjwt.version}</version>
</dependency>
边栏推荐
猜你喜欢
2022/08/02 Study Notes (day22) Multithreading
WinForm的控件二次开发
移动流量的爆发式增长,社交电商如何选择商业模式
接口和协议
刚上线就狂吸70W粉,新型商业模式“分享购”来了,你知道吗?
DFS对剪枝的补充
Can Oracle EMCC be installed independently?Or does it have to be installed on the database server?
Online password generator tool recommendation
How many moments have you experienced the collapse of electronic engineers?
Kotlin-Flow common encapsulation class: the use of StateFlow
随机推荐
6.神经网络剖析
【Harmony OS】【ARK UI】ets使用startAbility或startAbilityForResult方式调起Ability
Redis连接不上的报错解决方案汇总
js中的闭包
接口和协议
浏览器监听标签页关闭
Online password generator tool recommendation
汇编书摘抄
MySQL 删除表数据,重置自增 id 为 0 的两个方式
10.预测房价:回归问题
【翻译】开发与生产中的Kubernetes修复成本对比
修饰生物素DIAZO-生物素-PEG3-DBCO|重氮-生物素-三聚乙二醇-二苯基环辛炔
索引创建、删除与使用
软件开发的最大的区别是什么?
社交电商:流量红利已尽,裂变营销是最低成本的获客之道
Interface test practice | Detailed explanation of the difference between GET / POST requests
Concepts and Methods of Exploratory Testing
JS底层手写
Practical application of WebSocket
刚上线就狂吸70W粉,新型商业模式“分享购”来了,你知道吗?