暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

SpringBoot数据库账号密码,通过Jasypt加密

1455

  在做项目的时候,大多数情况,我们会将连接的数据库账号和密码写在yml配置文件中,不过这种方式很可能会导致安全问题(密码泄露),所以今天跟大家分享一下SpringBoot数据库加密操作

  由于是gradle项目,所以导入依赖的方式与maven有所区别,要在build.gradle中导入依赖

            compile group: 'com.github.ulisesbocchio', name: 'jasypt-spring-boot-starter', version: '3.0.4'


    复制

    这里我使用的是最新版本3.0.4

    导入依赖后,就可以写一个测试类来通过算法进行加密,代码如下:

      package com.taikang.ptms;


      import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;
      import org.jasypt.encryption.pbe.config.EnvironmentPBEConfig;
      import org.jasypt.util.text.BasicTextEncryptor;
      import org.junit.Test;


      //public class JasyptTest {
      // public static void main(String[] args) {
      // BasicTextEncryptor textEncryptor = new BasicTextEncryptor();
      // 加密所需的salt(盐),自定义
      // textEncryptor.setPassword("retail_salt");
      // 要加密的数据(数据库的用户名或密码)
      // String username = textEncryptor.encrypt("retail_u");
      // String password = textEncryptor.encrypt("retail_PWD_123");
      // System.out.println("username:"+username);
      // System.out.println("password:"+password);
      // }
      //}


      public class JasyptTest {


      // 加密
      @Test
      public static void testEncrypt() throws Exception {
      StandardPBEStringEncryptor standardPBEStringEncryptor = new StandardPBEStringEncryptor();
      EnvironmentPBEConfig config = new EnvironmentPBEConfig();


      // 加密的算法,这个算法是默认的
      config.setAlgorithm("PBEWithMD5AndDES");
      // 加密的密钥
      config.setPassword("minjd");
      standardPBEStringEncryptor.setConfig(config);
      String plainText = "eUU*RgTCD1dHiDFv";
      String encryptedText = standardPBEStringEncryptor.encrypt(plainText);
      System.out.println(encryptedText);
      // String encryptedText = "BkXvO0ayR2Gg1bMR0rh7qKePSzfcxOBjuVdpD6wOX+I1ESrb1Ldbwo+C48lb3ENN";
      // String plainText = standardPBEStringEncryptor.decrypt(encryptedText);
      // System.err.println(plainText);
      }


      // 解密
      @Test
      public static void testDe() throws Exception {
      StandardPBEStringEncryptor standardPBEStringEncryptor = new StandardPBEStringEncryptor();
      EnvironmentPBEConfig config = new EnvironmentPBEConfig();


      // 加密的算法,这个算法是默认的
      config.setAlgorithm("PBEWithMD5AndDES");
      // 加密的密钥
      config.setPassword("minjd");
      standardPBEStringEncryptor.setConfig(config);
      String encryptedText = "BkXvO0ayR2Gg1bMR0rh7qKePSzfcxOBjuVdpD6wOX+I1ESrb1Ldbwo+C48lb3ENN";
      String plainText = standardPBEStringEncryptor.decrypt(encryptedText);
      System.err.println(plainText);
      }


      public static void main (String[] args) throws Exception{
      testEncrypt();
      // testDe();
      }


      }




      复制

        其中使用的算法是默认的MD5加密算法,plaintext中写的是要加密的数据库密码,而password则为自定义的salt值,相当于密钥,上述代码中包含了加密操作和解密操作,写好后首先可以在本地运行一下,获得加密密码

        获得加密密码后,我们可以将本地local.yml中的数据库密码改为ENC(加密后密码)的格式,同时在yml配置文件中上下面这段代码:

        ###jasypt加密的盐值###
        jasypt:
        encryptor:
        iv-generator-classname: org.jasypt.iv.NoIvGenerator
        algorithm: PBEWithMD5AndDES
          password: minjd
        复制

        在运行前还需要在Run-edit configration中编辑一下VM,如下:


          -Djasypt.encryptor.password=minjd
          复制
          该步骤主要是为了在项目启动的时候,进行解密,接下来就可以本地调试了:

          可以看到本地已经起来了,那么就说明该方法成功。

          但是这样我们只是简单包装了一下,加密的密钥minjd依然暴露在yml配置文件中,依然可以反解出密码,所以想要在yml中去除这个配置。
          接下来有两种方式,对应两种不同的部署方法,第一种是通过Rancher部署,那我们将配置文件中的代码去除,在Rancher升级的时候,将配置写入,如下:

          这样升级即可。
          第二种是通过jar包手动部署,那么就需要在.sh可执行脚本中加入该段代码即可
            java -jar -Djasypt.encryptor.password=minjd


            复制

            文章转载自琢磨先生DataBase,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

            评论