SpringBoot中使用jasypt加解密的示例分享
下文笔者讲述SpringBoot中对配置信息的加密和解密的示例分享
如:在应用程序的配置文件中,一些配置信息处于加密状态
当程序需要使用时,再将信息解密然后使用
如:在应用程序的配置文件中,一些配置信息处于加密状态
当程序需要使用时,再将信息解密然后使用
jasypt加密解密的实现思路
1.引入jasypt相关依赖 2.配置jasypt使用的相关配置信息 3.使用工具类进行相关的加密和解密操作例
<dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot-starter</artifactId> <version>2.1.1</version> </dependency> 配置文件: # 加密的密钥 # 测试环境可以采用在配置文件中配置 # 生产环境建议采用启动参数的形式传入 # 其他配置参数参考:com.ulisesbocchio.jasyptspringboot.properties.JasyptEncryptorConfigurationProperties jasypt.encryptor.password=you salt # 解密得到原始密码spring.datasource.password= ENC(密文) //密文解密 @Autowired StringEncryptor stringEncryptor; @Test public void encrypt() { System.out.println("PWD: " + stringEncryptor.encrypt("yourpassword")); } public static void main(String[] args) { BasicTextEncryptor textEncryptor = new BasicTextEncryptor(); //加密所需的salt(盐) textEncryptor.setPassword("G0CvDz7oJn6"); //要加密的数据(数据库的用户名或密码) String username = textEncryptor.encrypt("root"); String password = textEncryptor.encrypt("root123"); System.out.println("username:"+username); System.out.println("password:"+password); }
SpringBoot中引入jasypt
源码地址
https://github.com/ulisesbocchio/jasypt-spring-boot
//引入依赖 <dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot-starter</artifactId> <version>2.1.1</version> </dependency> //application.yml //中增加jasypt的秘钥 jasypt: encryptor: #加密秘钥 password: 8ewrIOPIECD8919232FEEAK8923251 //测试类 @RestController public class IndexController { @Autowired private StringEncryptor encryptor; /** * 测试jasypt加密解密 */ @GetMapping("/jasypt") public void testJasypt() { String password = "123456"; String encryptPwd = encryptor.encrypt(password); System.out.println("加密::" + encryptPwd); System.out.println("解密:" + encryptor.decrypt(encryptPwd)); } } //启动服务,测试SpringBoot中是否正常加入jasypt //浏览器请求(端口号自定义):http://localhost:8080/jasypt 加密: stqvirrvG8TcLz9mqflBDQ== 解密:123456 //jasypt由于其使用的是PBEWithMD5AndDES加密方式 //所以每次加密出来的结果都不一样 //但解密都是一样的 //所以很适合对数据进行加密 //例 数据库密码为123456 spring: application: name: service-provider datasource: driver-class-name: com.mysql.jdbc.Driver type: com.alibaba.druid.pool.DruidDataSource url: jdbc:mysql://localhost:3306/mydb?autoReconnect=true&failOverReadOnly=false&createDatabaseIfNotExist=true&useSSL=false&useUnicode=true&characterEncoding=utf8 username: root password: ENC(stqvirrvG8TcLz9mqflBDQ==) 上面的 ENC()是固定写法,()里面是加密后的信息。 7、在测试类中增加代码: @Value("${spring.datasource.password}") private String dbPassword; // 数据库密码 /** * 测试配置文件字段加密后,项目中该字段的值 */ @GetMapping("/password") public String password() { return dbPassword; } //请求http://localhost:8080/password //出现结果 123456 jasypt: encryptor: #加解密秘钥 password: 8ewrIOPIECD8919232FEEAK8923251 #设置前缀后缀 property: prefix: "ENC@[" suffix: "]" //将加解密秘钥放在配置文件中是不安全的 //1、在启动类上赋值秘钥: @SpringBootApplication public class ProviderApplication { public static void main(String[] args) { /** 配置加解密秘钥,与配置文件的密文分开放 */ System.setProperty("jasypt.encryptor.password", "test-app"); // System.setProperty("jasypt.encryptor.password", "8ewrIOPIECD8919232FEEAK8923251"); SpringApplication.run(ProviderApplication.class, args); } } 2、自定义StringEncryptor /** * 配置StringEncryptor */ @Bean("jasyptStringEncryptor") public StringEncryptor stringEncryptor() { PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor(); SimpleStringPBEConfig config = new SimpleStringPBEConfig(); config.setPassword("8ewrIOPIECD8919232FEEAK8923251"); config.setAlgorithm("PBEWithMD5AndDES"); config.setKeyObtentionIterations("1000"); config.setPoolSize("1"); config.setProviderName("SunJCE"); config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator"); config.setIvGeneratorClassName("org.jasypt.salt.NoOpIVGenerator"); config.setStringOutputType("base64"); encryptor.setConfig(config); return encryptor; }
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。