最近入职了新公司,接手了一个Java项目。这个项目里面没有数据库连接的配置,配置写在公司的公共nacos服务配置中了,并且已经加密,所以没有办法直接拿到项目的密码。
由于本人社恐不善于跟导师沟通,而且这个项目写的很抽象,这就导致了我连不上公司项目的测试数据库,也就导致了没有办法进一步往下进行。
但是因为社恐,所以不到万不得已是不可能去问导师的,所以就开始自己研究。
其实基本思路很简单,我不管你加不加密,只要你连数据库,那你就肯定得先拿到数据库账号密码的原文才能连接上的。所以我们其实不用关心他具体是怎么加密的,只需要跟进代码,拿到解密后的原文即可。
首先,要知道项目使用什么包进行加解密的,我是直接翻项目的各个pom.xml文件,找到了这么一个依赖:
<dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot</artifactId> </dependency>
然后去这个人的GitHub上看了一下,发现了这个GitHub仓库:https://github.com/ulisesbocchio/jasypt-spring-boot
通过阅读项目的README.md,可以确定就是用的这个库进行的配置项加解密。
本着万事不觉先Google(划掉,破垃圾公司内网只能查百度 or bing)的原则,找到了思路。
思路来自这篇 CSDN 博客:https://blog.csdn.net/m0_37635053/article/details/118256179
这篇博客写的很详细,但是我不想研究那么通透,所以直接参考了其中加密的部分,修改成解密的部分了,具体如下:
首先,先检查项目中有没有这个依赖:
<dependency> <groupId>org.jasypt</groupId> <artifactId>jasypt</artifactId> <version>1.9.3</version> <scope>compile</scope> </dependency>
如果没有的话可以先添加一下(如果其他地方没用到,解密之后就可以删掉这个依赖了)
然后在项目里面随便找个地方,我就直接写到登录的Controller接口里面了
BasicTextEncryptor textEncryptor = new BasicTextEncryptor(); textEncryptor.setPassword("本地配置文件中,jasypt.encryptor配置的password"); String username = textEncryptor.decrypt("密文,也就是ENC(xxxxxx)括号里面的部分"); String password = textEncryptor.decrypt("密文,也就是ENC(xxxxxx)括号里面的部分"); System.out.println("username===" + username); System.out.println("password===" + password);
其中 textEncryptor.setPassword 传入参数就是本地配置文件中的 jasypt.encryptor.password
然后在这里打一个断点,调一下接口让程序走到这里来,就可以在下面的调试控制台看到解密后的原文了。
到此,密码就拿到手了。
难受的是,当我研究完这一套之后,导师把密码告诉我了... 我淦!
所以说,有时候多问问还是有好处的哈哈哈,就这样,又水了一篇文章。
本站文章除注明转载/出处外,均为原创,若要转载请务必注明出处。转载后请将转载链接通过邮件告知我站,谢谢合作。本站邮箱:admin@only4.work
尊重他人劳动成果,共创和谐网络环境。点击版权声明查看本站相关条款。