前言
前段时间公司线上服务器中病毒崩溃了,重新搞好后,公司领导要求对项目的数据库连接加密,避免数据泄露,于是就研究了下jasypt。
依赖
<dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot-starter</artifactId> <version>3.0.2</version> </dependency>
加密
写个main进行加密,如下:
public static void main(String[] args) { //PBEWithHMACSHA512AndAES_256 算法(3.0.0开始的默认算法) AES256TextEncryptor encryptor = new AES256TextEncryptor(); //PBEWithMD5AndDES 算法(旧版本的默认算法) //BasicTextEncryptor encryptor = new BasicTextEncryptor(); //PBEWithMD5AndTripleDES 算法 //StrongTextEncryptor encryptor = new StrongTextEncryptor(); //秘钥 encryptor.setPassword("秘钥"); //加密得到密文 encryptor.encrypt("明文"); //解密得到明文 encryptor.decrypt("密文"); }
例如加密数据库连接
System.out.println(encryptor.encrypt("jdbc:mysql://127.0.0.1:3306/xxx?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&serverTimezone=GMT%2B8"));将这个输出的字符串按ENC(密文)替换配置文件里的数据库连接,如:
spring: datasource: druid: url: ENC(+Ur250W+H0rWe5fZQNo4/ZoMSPkMz4LpVy2ZmO0f5MH+IRwMSNN+UTo2eKuNmYrONnth6Ux8fSSSHB4VVsMhPyFVxuOOorluE2MfTKRBySZsYlE5wOCYO0IyNs6p5u1riENJGJgiB/s8YlCG5VwsZ95myveybGn2ZhcgddZMTLeXTczQq+nENLPLFtCG2HBvghN4YRXX3LUL3+CoE2EMRA==)
即可完成加密
解密
配置文件加密成功后启动项目肯定是要解密的,这个时候就需要秘钥进行解密,秘钥的配置有以下几种方式:
1 直接写在配置文件(不推荐)
jasypt: encryptor: algorithm: PBEWithHMACSHA512AndAES_256 #使用的算法 对应刚才的main的注释算法 iv-generator-classname: org.jasypt.iv.RandomIvGenerator # 除了PBEWithHMACSHA512AndAES_256算法外,其他两个都写org.jasypt.iv.NoIvGenerator password: 123456 #秘钥
2 写在代码中 在springboot启动类的main函数中加
public static void main(String[] args){ System.setProperty("jasypt.encryptor.password", "123456"); System.setProperty("jasypt.encryptor.algorithm", "PBEWithHMACSHA512AndAES_256"); System.setProperty("jasypt.encryptor.iv-generator-classname", "org.jasypt.iv.RandomIvGenerator"); SpringApplication.run(DemoApplication.class, args); }
3 启动时写入
如:java -jar -Djasypt.encryptor.password=秘钥 xxx.jar
- 4 设置在环境变量中
例如在环境变量中设置秘钥
yml中使用:
jasypt: encryptor: password: ${PWD}
或java代码中使用
public static void main(String[] args){ System.setProperty("jasypt.encryptor.password", System.getenv("PWD")); SpringApplication.run(DemoApplication.class, args); }
PS:spring用法可以参考:https://blog.csdn.net/qq_28675967/article/details/90670994 和 https://blog.51cto.com/aiilive/1420903