最近,在修改 xxl-job 配置文件时,需要加入 MySQL 数据库的账密,以及报警邮箱的账密,而不想让别人一眼就看到这些私密信息,有必要进行加密和解密操作,而实际的项目中也是这样做的!这里,介绍一个常用的加解密库 jasypt 的使用。

1、通过 pom 文件引入 jar 包

在 https://mvnrepository.com/ 搜索并复制以下坐标信息,通过 pom 文件下载到本地 maven 仓库:

<!-- https://mvnrepository.com/artifact/com.github.ulisesbocchio/jasypt-spring-boot-starter -->
<dependency><groupId>com.github.ulisesbocchio</groupId><artifactId>jasypt-spring-boot-starter</artifactId><version>2.1.0</version>
</dependency><!-- https://mvnrepository.com/artifact/org.jasypt/jasypt -->
<dependency><groupId>org.jasypt</groupId><artifactId>jasypt</artifactId><version>1.9.2</version>
</dependency>

2、使用本地 jasypt 库进行加解密测试

通过 CMD 测试一下该加解密库的用法~,注意实际使用时下面的pw要改为password,因为文章检测不允许出现这类敏感字符,所以使用了pw替代password说明。

加密操作如下:

algorithm 指的是采用的加解密算法,input 设置需要加密的真实密码,pw 是参考密钥(可自定义),而 output 则是加密后的密码了。

注意:每次执行该命令,获取的输出值都是不一样的,不妨可以试一试,但不影响后面的解密。

解密操作如下:

D:\XXX\maven\repository\org\jasypt\jasypt\1.9.2>java -cp jasypt-1.9.2.jar org.jasypt.intf.cli.JasyptPBEStringDecryptionCLI input="7Cm9pYnxTAsKlFMZORZNHyI9VM2b7Jk4" pw="weixiangxiang" algorithm=PBEWithMD5AndDES----ENVIRONMENT-----------------
Runtime: Oracle Corporation Java HotSpot(TM) 64-Bit Server VM 25.261-b12----ARGUMENTS-------------------
algorithm: PBEWithMD5AndDES
input: 7Cm9pYnxTAsKlFMZORZNHyI9VM2b7Jk4
password: weixiangxiang----OUTPUT----------------------
2022081800

注意:虽然每次加密后的字符串都不一样,但解密时获取到的真实密码都是一致的!!

3、Java demo 测试

除了通过 java -cp 命令加解密,也可以写 Java 测试类输出加解密结果,如下:

import org.jasypt.util.text.BasicTextEncryptor;
import org.junit.jupiter.api.Test;public class EncryptTest {@Testvoid test001() {// 默认 PBEWithMD5AndDES 算法BasicTextEncryptor basicTextEncryptor = new BasicTextEncryptor();// 设置salt值,可随意定义basicTextEncryptor.setPassword("weixiangxiang");// 加密
//        System.out.println(basicTextEncryptor.encrypt("2022081800"));// 每次加密结果都是不一样的,但通过密钥解密出的结果是一样的// 7Cm9pYnxTAsKlFMZORZNHyI9VM2b7Jk4// Hju0OL0UJZrIzVMnJzu5xX6xXcGEgGcT// a8VcXchj9XHbR13XVmdr1XVA3fBGmqSZ// 解密:输出结果都是2022081800System.out.println(basicTextEncryptor.decrypt("7Cm9pYnxTAsKlFMZORZNHyI9VM2b7Jk4"));System.out.println(basicTextEncryptor.decrypt("Hju0OL0UJZrIzVMnJzu5xX6xXcGEgGcT"));System.out.println(basicTextEncryptor.decrypt("a8VcXchj9XHbR13XVmdr1XVA3fBGmqSZ"));}
}

4、实际项目的加解密操作

在需要加解密的地方,注释说明如何加解密操作:(注意,为了安全只能测试环境标记)

#### encryptor ###
#jasypt:
#  encryptor:
#  algorithm: PBEWithMD5AndDES
#  password: EbfYkitulv73I2p0mXI50JMXoaxZTKJ7  #参考密钥,具体的密钥还要看启动时加入的密钥# java -cp jasypt-1.9.2.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input="" pw="" algorithm=
# java -cp jasypt-1.9.2.jar org.jasypt.intf.cli.JasyptPBEStringDecryptionCLI input="" pw="" algorithm=

最后,xxl-job 配置文件的 application.properties 可改成这样:

# 调度中心JDBC链接:就是上面创建的数据库连接
spring.datasource.url=jdbc:mysql://ENC(mbA7Vhof3rU1azG98nVgFiGmYRPk7md6):3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
spring.datasource.username=ENC(YGx/CR56wvzPrDslLXwbng==)
spring.datasource.password=ENC(93CMx3ypsqnRdLRKgKMHxg==)
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
### 报警邮箱
spring.mail.host=smtp.qq.com
spring.mail.port=25
spring.mail.username=ENC(Op3pkJ3z6AnTiXuGvNH9cLf4sR+xIiIZc1BeyAuMGeI=)
spring.mail.password=ENC(zXLgsRE3TnGZS25dB3aRop3aUjNfFZu1dkudRtCjK0k=)

最后,启动项目时加入密钥,可以每次重启时动态调整密钥,比如:

java -jar -Djasypt.encryptor.password=123456789 xxx.jar

因此,在实际项目中,就可以实现对比如用户名、密码等敏感信息的加密了。

Encrypt 加密/解密相关推荐

  1. encrypt 加密解密

    encrypt加密与解密 <?php class Security {public static function encrypt($input, $key) {$size = mcrypt_g ...

  2. android rsa加密工具类,GitHub - Lerist/encrypt: Android 加密解密工具包。

    Encrypt(加密工具) 字符串,byte[],文件等对象的加密和解密工具集合,包含了多种加密方案. 加密类型 摘要 相关方法 简单加密 换一种编码格式 Base64Util 单向加密 只能加密,不 ...

  3. oracle加密 解密,oracle加密encrypt,解密decrypt

    本文将为您描述oracle加密encrypt,解密decrypt,教程操作步骤:oracle加密encrypt,解密decrypt 目录 oracle加密encrypt,解密decrypt 加密 解密 ...

  4. encrypt decrypt 加密解密完整实例(密文可用密钥解密)

    <?php error_reporting(0); header("content-Type: text/html; charset=utf-8");//输出编码/**功能: ...

  5. php encrypt加密和解密,php中关于openssl_encrypt的加密和解密

    1.DES介绍 DES 是对称性加密里面常见一种,是一种使用密钥加密的块算法.密钥长度是64位(bit),超过位数密钥会被忽略. a.跨语言做 DES 加密解密经常会出现问题,往往是填充方式不对.编码 ...

  6. iOS使用Security.framework进行RSA 加密解密签名和验证签名

    iOS 上 Security.framework为我们提供了安全方面相关的api: Security框架提供的RSA在iOS上使用的一些小结 支持的RSA keySize 大小有:512,768,10 ...

  7. java之php、Android、JAVA、C# 3DES加密解密

    异常如下 1.javax.crypto.BadPaddingException: Given final block not properly padded 1)要确认下是否加密和解密都是使用相同的填 ...

  8. 如何优雅的实现 Spring Boot 接口参数加密解密?

    点击关注公众号,Java干货及时送达 加密解密本身并不是难事,问题是在何时去处理?定义一个过滤器,将请求和响应分别拦截下来进行处理也是一个办法,这种方式虽然粗暴,但是灵活,因为可以拿到一手的请求参数和 ...

  9. python实现加密字符串_Python实现对字符串的加密解密方法示例

    本文实例讲述了Python实现对字符串的加密解密方法.分享给大家供大家参考,具体如下: 需求是是要将密码存在数据库里,所以要加密解密是可逆的,在数据库里不要有特殊字符,防止数据库备份和恢复中出错. 安 ...

最新文章

  1. qemu模拟A9/A15运行Linux4.2.3
  2. asp.net提交危险字符处理方法之一
  3. FFmpeg被声明为已否决的解决方案
  4. 上下文 及 执行上下文
  5. 【推荐活动】2015产品经理读书计划
  6. shell和linux的认识
  7. Android 闹钟,实现demo
  8. Python版基于递归的冒泡排序算法
  9. This application is only supported on Windows 8.1, Windows Server 2012 R2, or hi gher.
  10. 获取本机IP可区分系统可区分虚拟机和本机java程序跨平台
  11. php获取多选框的值
  12. CS5463代码模块解析(包含下载链接)
  13. php微信公众号绑定微信号,订阅号实现微信网页授权登陆(原创)
  14. 数学 - 基本初等函数导数公式及求导法则
  15. 每天被信息轰炸的你,如何辨别新闻真假?
  16. Android-第十三节04Room框架详解
  17. SPIKE创新科技套装做探路机器人(上)
  18. ios键盘弹起页面被顶上去的问题
  19. 数学建模:火箭发生升空模型——基于matlab语言
  20. 批量出售QQ群idcnd传媒提供

热门文章

  1. 百度地图api不能加载出地图只有格网的问题解决方法
  2. 根据迟到时间和月薪 来计算员工应缴罚款的金额(法一:if语句、法二:方法的重载)
  3. 曙光服务器做系统,IT管理变简单 简析曙光Gridview 2.0软件
  4. IDEA搭建Spring框架环境
  5. 社会名流问题算法详细复杂度分析
  6. 小米“抢跑”?20秒的折叠屏手机视频流出 1
  7. 使用Android Accessibility实现免Root自动批量安装功能
  8. Puppet使用记录
  9. 快手工程笔试题A卷 部分知识点总结
  10. HTTP篇-----HTTP的基础知识