代码千万行,安全第一行;密码明文存,同事两行泪 --摘自 技术最前线一遍文章标题

最近又发生了勒索病毒。

中勒索病毒原因:

受攻击的账户密码都是以明文形式存储的。下面这位hacker是不是很帅。

最近刚弄完一个项目,结果我的数据库配置文件是明文的,被leader看到了 就被骂了一顿。说如果hacker直接拉去了你的配置文件 根本不用破解直接把你数据库数据就给拉走了。
 我翻了好几个项目貌似都没有加密 直接配置文件就是下面。
一个博客系统的配置文件:
一个app项目的配置文件:
我的后背感觉一阵凉意。。。。搬了好几年的砖,感觉自己写的代码在裸奔。

翻阅了很多博客我总结了一下SpringBoot的yml文件的数据库密码的配置:

pom文件添加一下依赖:pom文件github地址:https://mvnrepository.com/artifact/com.github.ulisesbocchio/jasypt-spring-boot-starter

代码如下:
<!-- yml 文件加密 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>

直接复制过来一个工具类: 加密:

解密:

第一次执行结果:

第二次执行结果:

。。。。

有木有发现每一次执行的加密的串都不一样。 加密方式:PBEWithMD5AndDES 加密方式解释为:

反正上图我是没看dong。也翻阅了很多资料。工作模式填充模式就把我弄蒙了。不过我现在还在看,你们会的可以给我讲一下。

代码如下:
 package cn.cnbuilder.utils;

import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;
import org.jasypt.encryption.pbe.config.EnvironmentPBEConfig;
import org.junit.jupiter.api.Test;


public class YmlEncryptionUtil {
   /**
    * 加密串
    *
    * @param key 秘钥
    * @param str 要加密的字符串
    * @throws Exception
    */
   public static String encryption(String key, String str) throws Exception {
       StandardPBEStringEncryptor standardPBEStringEncryptor = new StandardPBEStringEncryptor();
       EnvironmentPBEConfig config = new EnvironmentPBEConfig();
       //加密算法
       config.setAlgorithm("PBEWithMD5AndDES");
       // 加密的密钥
       config.setPassword(key);
       standardPBEStringEncryptor.setConfig(config);
       //加密串
       String encryptedText = standardPBEStringEncryptor.encrypt(str);
       return encryptedText;
   }

   /**
    * 解密工具类
    * @param encryptedStr 要解密的字符串
    * @param key 秘钥
    * @throws Exception
    */
   public static  String Decrypt(String encryptedStr, String key) throws Exception {
       StandardPBEStringEncryptor standardPBEStringEncryptor = new StandardPBEStringEncryptor();
       EnvironmentPBEConfig config = new EnvironmentPBEConfig();
       //加密模式
       config.setAlgorithm("PBEWithMD5AndDES");
       //加密秘钥
       config.setPassword(key);
       standardPBEStringEncryptor.setConfig(config);
       //密文
       String str = standardPBEStringEncryptor.decrypt(encryptedStr);
       return str;
   }

   public static void main(String[] args) throws Exception {
       String encryptedStr = encryption("kingYiFan", "blog:www.cnbuilder.cn");
       System.out.println(encryptedStr);
       String str = Decrypt(encryptedStr, "kingYiFan");
       System.out.println(str);
   }
}
把以上工具类直接copy到project中,然后直接拿着数据库的连接方式生成加密串:
 然后填充到yml文件配置文件中 ENC(密文)

具体如下图:

然后在yml文件中加入key

代码如下:
  jasypt:
      encryptor:
            password: KingYiFan
修改完配置文件,重新启动项目就好了。有没有人一种感觉被我搞蒙了。如果这样的话,加密key都有,hacker直接就拿着工具类解密了。
我也有这种感觉。

        我有一个想法就是在启动jar包的时候用命令给赋key(秘钥)
命令如下(自行测试哈): java -jar jar包名称 --jasypt.encryptor.password: kingYiFan

五一假期第一个工作日:感觉一点精神都没有好累好累。好想睡觉。这个五一练了三天科二,每天早6晚9 感觉整个人都不一样了。迷迷糊糊把这篇文章给写完的。

有什么问题可以联系一下我。

鼓励作者写出更好的技术文档,就请我喝一瓶哇哈哈哈哈哈哈哈。。你们的赞助决定我更新的速度哦!

下一篇文章我给大家分享一下科目二的技巧以及考试要素。

微信:

支付宝:


感谢一路支持我的人。。。。。

Love me and hold me
QQ:69673804(16年老号)
EMAIL:itw@tom.com
友链交换
如果有兴趣和本博客交换友链的话,请按照下面的格式在评论区进行评论,我会尽快添加上你的链接。

网站名称:KingYiFan’S Blog
网站地址:http://blog.cnbuilder.cn
网站描述:年少是你未醒的梦话,风华是燃烬的彼岸花。
网站Logo/头像: [头像地址](https://blog.cnbuilder.cn/upload/2018/7/avatar20180720144536200.jpg)