SpringMVC项目——数据库账户密码加密

目录

1:为什么需要账户密码加密

2:没有加密之前

3:加密实现

3.1:加密算法代码实现

3.2:配置文件更改


1:为什么需要账户密码加密

在web项目中我们常常把数据库信息写入到配置文件中,便于降低代码耦合,但是明文的密码安全性较低。比如在同一个公司里边,有具体的运维实施团队,人多嘴杂。让他们部署不同的项目组的文件时,有经验的实施人员可能会查看你的配置文件中的数据账户密码信息,如果管控不到位,会造成账户密码泄露的风险。所以我们需要对配置文件中的数据库账户密码信息加密。

2:没有加密之前

在没有加密之前的我们的配置文件通常如下,以此类引入外部的数据库配置文件,而数据库配置文件中的账户密码为明文,安全性比较低。

数据库配置文件明文如下,安全性较低

3:加密实现

3.1:加密算法代码实现

加密工具类:

package com.thit.util;

import java.security.Key;
import java.security.SecureRandom;

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;



/**
 * @author 79027
 * 对称性加密
 */
public class DESUtils  
{  
    private static Key key;  
    //设置秘钥
    private static String KEY_STR="mykey";  
      
    static{  
        try  
        {  
        	//生成des算法对象
            KeyGenerator generator = KeyGenerator.getInstance("DES"); 
            //采用SHA1安全策略
            SecureRandom secureRandom=SecureRandom.getInstance("SHA1PRNG");  
            //设置密匙种子
            secureRandom.setSeed(KEY_STR.getBytes());  
            generator.init(secureRandom);  
            //生成密匙
            key = generator.generateKey();  
            generator=null;  
        }  
        catch (Exception e)  
        {  
            throw new RuntimeException(e);  
        }  
    }  
      
    /**
     * 对字符串进行加密,返回BASE64的加密字符串
     * <功能详细描述>
     * @param str
     * @return
     * @see [类、类#方法、类#成员]
     */
    public static String getjiami(String str){
    	
        BASE64Encoder base64Encoder = new BASE64Encoder();
        System.out.println(key);
        try
        {
            byte[] strBytes = str.getBytes("UTF-8");
            //获取加密对象
            Cipher cipher = Cipher.getInstance("DES");
            cipher.init(Cipher.ENCRYPT_MODE, key);
            byte[] encryptStrBytes = cipher.doFinal(strBytes);
            return base64Encoder.encode(encryptStrBytes);
        }
        catch (Exception e)
        {
            throw new RuntimeException(e);
        }
        
    }
    
    /**
     * 对BASE64加密字符串进行解密
     * <功能详细描述>
     * @param str
     * @return
     * @see [类、类#方法、类#成员]
     */
    public static String getjiemi(String str){
        BASE64Decoder base64Decoder = new BASE64Decoder();
        try
        {	//将密码转化base64
            byte[] strBytes = base64Decoder.decodeBuffer(str);
            //初始化加密对象
            Cipher cipher = Cipher.getInstance("DES");
            //初始化加密信息按照
            cipher.init(Cipher.DECRYPT_MODE, key);
            //解密的得到数组
            byte[] encryptStrBytes = cipher.doFinal(strBytes);
            return new String(encryptStrBytes,"UTF-8");
        }
        catch (Exception e)
        {
            throw new RuntimeException(e);
        }
        
    }
    
    
    public static void main(String[] args)
    {
        String name ="root";
        String password="123456";
        String encryname = getjiami(name);
        String encrypassword = getjiami(password);
        System.out.println(encryname);
        System.out.println(encrypassword);
        
        System.out.println(getjiemi(encryname));
        System.out.println(getjiemi(encrypassword));
    }


}

加密bean

package com.thit.util;

import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;

public class EncryptPropertyPlaceholderConfigurer extends PropertyPlaceholderConfigurer  {
	//配置解密字段
    private String[] encryptPropNames = {"jdbc_username", "jdbc_password"};  
      
    @Override  
    protected String convertProperty(String propertyName, String propertyValue)  
    {  
          
        //如果在加密属性名单中发现该属性 进行解密
        if (isEncryptProp(propertyName))  
        {  
        	//开始解密
            String decryptValue = DESUtils.getjiemi(propertyValue);  
            System.out.println(decryptValue);  
            return decryptValue;  
        }else {  
        	//非加密字段直接返回
            return propertyValue;  
        }  
          
    }  
      
    private boolean isEncryptProp(String propertyName)  
    {  
        for (String encryptName : encryptPropNames)  
        {  
            if (encryptName.equals(propertyName))  
            {  
                return true;  
            }  
        }  
        return false;  
    }  
}

3.2:配置文件更改

数据库配置文件更改:

spring配置文件更改:

  • 6
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值