springboot配置文件敏感信息加密
前言
一般情况下,配置文件会包含数据库账号密码、业务的一些密钥等重要的敏感信息,如果这些信息泄露,会产生严重后果,因此对这些敏感信息加密是必不可少的。 Jasypt
这 是一个 java 库,它允许开发人员以最小的努力将基本的加密功能添加到他/她的项目中,而无需深入了解密码学的工作原理 ,官网如下:http://www.jasypt.org/
其最核心的步骤就两个: 添加jasypt依赖 添加配置 Jasypt示例
构建springboot项目,该示例是基于springboot版2.7.3,jdk17,jasypt版本是3.04
1.引入依赖 com.github.ulisesbocchio jasypt-spring-boot-starter 3.0.4
2.配置文件
这是数据库账号密码的一个配置 spring.datasource.username=root spring.datasource.password=root
现在需要对username和password进行加密,加密后的结果如下: spring.datasource.username=ENC(eIOQM9aChGP4/CQk7RXAM7ZSK7AIBI9faeQb31M5/ouChpMIDHlB2+uSsIaZmxQU) spring.datasource.password=ENC(Y+tFn7NIUjXhUjtyfpDmI7EfL9ORPiRKSKrnxU+3wfFcHUo9cl2/wv4uAlc56lng)
ENC()是jasypt的一个标识符
3.利用代码程序加密(写一个加密工具)
这是一个小demo,所有的项目都可以使用这个工具生成加密密码
核心代码如下: package com.xm.demo.common.jasypt; import org.jasypt.encryption.pbe.StandardPBEStringEncryptor; import org.jasypt.iv.RandomIvGenerator; import org.springframework.stereotype.Component; @Component public class Jasypt { private static final String PBEWITHMD5ANDDES = "PBEWithMD5AndDES"; private static final String PBEWITHHMACSHA512ANDAES_256 = "PBEWITHHMACSHA512ANDAES_256"; /** * 加密 * @param str 加密的字符 * @param salt 密钥 * @return java.lang.String */ public String encryption(String str,String salt){ StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor(); encryptor.setPassword(salt); encryptor.setAlgorithm(PBEWITHHMACSHA512ANDAES_256); encryptor.setIvGenerator(new RandomIvGenerator()); return encryptor.encrypt(str); } /** * 解密 * @param str 解密的字符 * @param salt 密钥 * @return java.lang.String */ public String decryption(String str, String salt){ StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor(); encryptor.setPassword(salt); encryptor.setAlgorithm(PBEWITHHMACSHA512ANDAES_256); encryptor.setIvGenerator(new RandomIvGenerator()); return encryptor.decrypt(str); } }
4.添加配置参数 jasypt.encryptor.password=demo
这个配置是必须的,但这里有个问题就是,把加密的密钥放到配置文件里,如果泄露了,别人还是可以解密的,因此需要把这个配置放到别的地方去,当然开发阶段把密钥放到配置中是没有问题的。
方式一: 直接作为程序启动时的命令行参数来带入 java -jar xxx.jar --jasypt.encryptor.password=demo
方式二: 直接作为程序启动时的应用环境变量来带入 java -Djasypt.encryptor.password=demo -jar xxx.jar
5.jasypt配置扩展 jasypt.encryptor.password=demo #加密密钥 jasypt.encryptor.algorithm=PBEWITHHMACSHA512ANDAES_256 #加密算法(默认) jasypt.encryptor.property.prefix=ENC( #标识符 jasypt.encryptor.property.suffix=) #标识符
实际开发的流程是这样的:
运维提供加密后的信息和密钥,例如加密后的账号密码,然后开发人员只需要在pom文件中添加jaspyt依赖,以及配置文件中加上jasypt.encryptor.password=密钥(开发阶段)。项目上线了,运维会把密钥作为程序启动时的命令行参数来带入 。
国产车近几年进步很大,为什么还有这么多人不喜欢国产车呢?国产车近几年的进步很大,这是有目共睹的,但依旧卖不过合资车,这也是无可争议的事实。这里面的原因很多,但主要的是,合资车长期以来积累的口碑,汽车工业发展到今天,总共走过了110多年的
为什么中国人能直接吃甘蔗,其他的国家不能呢?有许多人对于中国人的看法都是太过于直接的,就像大家吃甘蔗的时候都会直接去啃。许多外国人表示,对于中国人的这种做法十分的不解,也会觉得有些搞笑,因为在外国人他们吃尴尬的时候,都会把干
中国保存最完好的古城是哪里?中国古城十多个,保存完好是商丘。商丘古城城摞城,地下最早是东周。宋都宋城与睢阳,泥沙之中遗迹留。条件成熟再发掘,必有惊喜震神州。归德古城明朝建,风雨洗礼五百秋。城廓城湖与城墙,三位
儿媳妇快生孩子。我和亲家母都是退休返聘。谁辞职带孩子比较好?谁都不用辞职,掏钱赚舒服。雇月嫂,伺候完月子再雇保姆。这样你可以发挥余热工作之余摆弄儿孙,关键是婆媳矛盾少,你也赚个舒服。唉,其实您就是想让大家说叫你亲家辞职看孩子,对吧?原因已经
琅琊榜里梅长苏最后死了么?他曾经是金陵城最耀眼的少年,他又是战功赫赫的赤焰军少帅,他是晋阳公主与赤焰大帅林燮之子林殊,他生而不凡。当他再次出现在金陵城时,他是江湖上最大帮派的宗主江左梅郎。进京时为了掩人耳目
LOL霸哥是怎么火起来的?一热搜上有了BUG?不,是热搜上有了霸哥。Bug,意为漏洞,特指程序上存在的漏洞。然而,细心的小伙伴们可能已经发现,说到Bug,更多的游戏玩家会联想到YY直播人气游戏主播英雄联盟战
欧冠16强抽签和F1收官战,哪个更离谱?经过一场闹剧之后,北京时间12月13日22点,欧冠18决赛抽签在瑞士尼翁重新进行,最终对阵结果终于出炉。请看下图再看这张图,这是之前的对阵看出问题出在哪里了吗?欧足联当时的解释是,
为什么现在看电视追剧,手机上都那么方便了,还有电视机专卖店?摆设呗!实际意义越来越小。就象有老婆的男人还要千方百计去找小三一样。既然小三那么好,不如直接娶小三呗?关键是得先有老婆,然后才有小三,顺序不能颠倒!现在电视还是有一个群体的,比如老
女生为什么喜欢皮裤?我以前交过的一个女朋友,她也喜欢穿皮裤。而且不管冬天还是夏天,我只要和她约定,她都是穿皮裤。我印象中,她就穿过几次裙子,大部分都是穿皮裤。我有一次问她,现在夏天天气这么热,你穿皮裤
终生监禁的犯人会岀狱吗?我不懂法律,看到网络大v们邀请都没回答问题我想要看终生监禁的犯人犯法条律第一是卖国政治犯罪。第二有改判的法律条件。第三有错判误判案件,监狱不是罪犯的停尸场,总之有出狱的机会。分二种
放弃4300多元的事业单位,去集团公司子公司(国企)做个中层领导职务,20万年薪可以去吗?本人之前就是一个央企下属企业的中层,年薪也是20万。谈谈感受可能对您有所帮助。一您的情况分析1。成长性。在编的事业单位职工,工资一般,估计成长性也很有限。一般事业单位层级十分有限,