网站首页 > 开源技术 正文
介绍语
本头条号主要是Java常用关键技术点,通用工具类的分享;以及springboot+springcloud+Mybatisplus+druid+mysql+redis+swagger+maven+docker等集成框架的技术分享;datax、kafka、flink等大数据处理框架的技术分享。文章会不断更新,欢迎码友关注点赞收藏转发!
关注多的话,后面会录制一些视频教程,图文和视频结合,比如:图书介绍网站系统、抢购系统、大数据中台系统等。技术才是程序猿的最爱,码友们冲啊
如果码友觉得代码太长,可以从头到尾快速扫射一遍,了解大概即可。觉得有用后再转发收藏,以备不时之需。
正文:
项目中你的数据库密码不会是直接明文吧?如果是,那请你考虑下是不是有安全风险呀。我的项目中涉及到密码的,都用这个工具类进行加密,在配置文件(如bootstrap.yml)中配置加密后的密文,在数据库配置类中再解密,这样数据库的密码就不会裸奔了。下面给出使用的案例简单截图,以后也会分享对mysql密码进行加密处理的案例和源码。
mysql使用案例截图
在配置文件中配置加密后的密文
在配置类中解密
工具类使用例子。(已修改了工具类的方法名)
上面案例使用的工具类:
import org.apache.commons.codec.binary.Base64;
import javax.crypto.*;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
/**
* AES加解密工具类
*
* @author liangxn
*/
public class AesUtil {
/**
* SecureRandom类的seed,可以改为自己的字符串
*/
private static final String RANDOM_SEED = "seed-abcxyz-123-456";
private AesUtil() {}
/**
* 加密方法
*/
public static String encrypt(String content) {
// 待加密的内容
byte[] contentByte = content.getBytes(StandardCharsets.UTF_8);
byte[] data = new byte[0];
try {
data = cipher(contentByte, Cipher.ENCRYPT_MODE);
} catch (NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeyException | IllegalBlockSizeException | BadPaddingException e) {
e.printStackTrace();
}
return new String(Base64.encodeBase64(data), StandardCharsets.UTF_8);
}
/**
* 加密方法
*/
public static String decrypt(String content) {
byte[] decodeContent = Base64.decodeBase64(content);
byte[] data = new byte[0];
try {
data = cipher(decodeContent, Cipher.DECRYPT_MODE);
} catch (NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeyException | IllegalBlockSizeException | BadPaddingException e) {
e.printStackTrace();
}
return new String(data, StandardCharsets.UTF_8);
}
/**
* 加解密计算器
*
* @param content 要加密的内容
* @param mode 计算模式(本工具类用到Cipher.ENCRYPT_MODE、Cipher.DECRYPT_MODE这两个)
* @return
*/
private static byte[] cipher(byte[] content, int mode) throws NoSuchAlgorithmException, NoSuchPaddingException,
InvalidKeyException, IllegalBlockSizeException, BadPaddingException {
if (content == null) {
throw new NullPointerException("content为空");
}
if (mode != Cipher.ENCRYPT_MODE && mode != Cipher.DECRYPT_MODE) {
throw new IllegalArgumentException("mode非法");
}
// AES密钥生成器实例
KeyGenerator keygen = KeyGenerator.getInstance("AES");
// 安全随机数工具,创建SHA1PRNG随机算法的实例
SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
// 设置种子
random.setSeed(AesUtil.RANDOM_SEED.getBytes(StandardCharsets.UTF_8));
// 初始化密钥生产器
keygen.init(128, random);
// 生成原始对称密钥
SecretKey secretKey = keygen.generateKey();
// 获得原始对称密钥的字节数组
byte[] secretKeyByte = secretKey.getEncoded();
// 生成AES密钥
SecretKey key = new SecretKeySpec(secretKeyByte, "AES");
// 创建密码器
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
// 初始化密码器
cipher.init(mode, key);
// 数据加密
return cipher.doFinal(content);
}
}
鄙人编码十年多,在项目中也积累了一些工具类,很多工具类在每个项目都有在用,很实用。大部分是鄙人封装的,有些工具类是同事封装的,有些工具类已经不记得是ctrl+c的还是自己封装的了,现在有空就会总结项目中大部分的工具类,分享给各位码友。如果文章中涉及的代码有侵权行为请通知鄙人处理。
计划是先把工具类整AESU理出来,正所谓工欲善其事,必先利其器。项目中不管是普通单体项目还是多模块maven项目或是分布式微服务,一部分功能模块都是可以重用的,工具类模块就是其中之一。
猜你喜欢
- 2024-11-26 MySQL分库分表实战
- 2024-11-26 MobaXterm 之 Network Services
- 2024-11-26 SpringBoot系列(十五)整合缓存,项目必用的技术
- 2024-11-26 盘点认证框架 : SpringSecurity OAuth 篇
- 2024-11-26 @Cacheable缓存key生成策略及自定义key
- 2024-11-26 对称加密算法之Java SM4算法应用 附可用工具类
- 2024-11-26 java中加密算法AES和RSA
- 2024-11-26 领域驱动设计系列课程-领域服务(4)
- 2024-11-26 设计模式——简单工厂模式( Simple Factory Pattern )
- 2024-11-26 Spring Boot使用Redis + Cafeine实现二级缓存?
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)