实战SSM_O2O商铺_44【DES加密】 关键配置信息进行DES加密
生活随笔
收集整理的這篇文章主要介紹了
实战SSM_O2O商铺_44【DES加密】 关键配置信息进行DES加密
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 概述
- 工程結構
- DES工具類
- 修改配置文件中的用戶名和密碼
- 繼承PropertyPlaceholderConfigurer,重寫convertProperty方法
- 配置自定義的EncryptPropertyPlaceholderConfigurer
- 測試
- Github地址
概述
為了安全,我們需要對數據庫的用戶名和密碼進行加密。
之前的文章 Spring-使用加密的屬性文件02
工程結構
DES工具類
package com.artisan.o2o.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;/*** * * @ClassName: DESUtils* * @Description: DES是一種對稱加密算法。 所謂對稱加密算法就是指使用相同的密鑰* * @author: Mr.Yang* * @date: 2018年8月9日 下午9:09:22*/ @SuppressWarnings("restriction") public class DESUtils {private static Key key;// 設置密鑰keyprivate static String KEY_STR = "myKey";private static String CHARSETNAME = "UTF-8";private static String ALGORITHM = "DES";static {try {// 生成DES算法對象KeyGenerator generator = KeyGenerator.getInstance(ALGORITHM);// 運行SHA1安全策略SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");// 設置上密鑰種子secureRandom.setSeed(KEY_STR.getBytes());// 初始化基于SHA1的算法對象generator.init(secureRandom);// 生成密鑰對象key = generator.generateKey();generator = null;} catch (Exception e) {throw new RuntimeException(e);}}/*** * * @Title: getEncryptString* * @Description: 獲取加密后的信息* * @param str* * @return: String*/public static String getEncryptString(String str) {// 基于BASE64編碼,接收byte[]并轉換為StringBASE64Encoder base64encoder = new BASE64Encoder();try {// 按UTF-8編碼byte[] bytes = str.getBytes(CHARSETNAME);// 獲取加密對象Cipher cipher = Cipher.getInstance(ALGORITHM);// 初始化密碼信息cipher.init(Cipher.ENCRYPT_MODE, key);// 加密byte[] doFinal = cipher.doFinal(bytes);// byte[] to encode好的String并返回return base64encoder.encode(doFinal);} catch (Exception e) {throw new RuntimeException(e);}}/*** * * @Title: getDecryptString* * @Description: 獲取解密之后的信息* * @param str* * @return: String*/public static String getDecryptString(String str) {// 基于BASE64編碼,接收byte[]并轉換為StringBASE64Decoder base64decoder = new BASE64Decoder();try {// 將字符串decode成byte[]byte[] bytes = base64decoder.decodeBuffer(str);// 獲取解密對象Cipher cipher = Cipher.getInstance(ALGORITHM);// 初始化解密信息cipher.init(Cipher.DECRYPT_MODE, key);// 解密byte[] doFinal = cipher.doFinal(bytes);// 返回解密之后的信息return new String(doFinal, CHARSETNAME);} catch (Exception e) {throw new RuntimeException(e);}}// 測試public static void main(String[] args) {System.out.println(getEncryptString("root"));System.out.println(getEncryptString("root"));System.out.println(getDecryptString("WnplV/ietfQ="));System.out.println(getDecryptString("WnplV/ietfQ="));}}修改配置文件中的用戶名和密碼
jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/o2o?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT #jdbc.username=root #jdbc.password=root jdbc.username=WnplV/ietfQ= jdbc.password=WnplV/ietfQ=繼承PropertyPlaceholderConfigurer,重寫convertProperty方法
package com.artisan.o2o.util;import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;/*** * * @ClassName: EncryptPropertyPlaceholderConfigurer* * @Description: 繼承PropertyPlaceholderConfigurer,重寫convertProperty* * @author: Mr.Yang* * @date: 2018年8月9日 下午9:20:04*/ public class EncryptPropertyPlaceholderConfigurer extendsPropertyPlaceholderConfigurer {// 需要加密的字段數組private String[] encryptPropNames = { "jdbc.username", "jdbc.password" };/*** 對關鍵的屬性進行轉換*/@Overrideprotected String convertProperty(String propertyName, String propertyValue) {if (isEncryptProp(propertyName)) {// 解密String decryptValue = DESUtils.getDecryptString(propertyValue);return decryptValue;} else {return propertyValue;}}/*** * * @Title: isEncryptProp* * @Description: 判斷該屬性是否加密* * @param propertyName* * @return: boolean*/private boolean isEncryptProp(String propertyName) {for (String encryptpropertyName : encryptPropNames) {if (encryptpropertyName.equals(propertyName))return true;}return false;} }配置自定義的EncryptPropertyPlaceholderConfigurer
<bean class="com.artisan.o2o.util.EncryptPropertyPlaceholderConfigurer"p:location="classpath:jdbc.properties"p:fileEncoding="utf-8"/>測試
啟動測試,可以debug調測 ,能正常從數據庫加載數據即可
Github地址
代碼地址: https://github.com/yangshangwei/o2o
總結
以上是生活随笔為你收集整理的实战SSM_O2O商铺_44【DES加密】 关键配置信息进行DES加密的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 实战SSM_O2O商铺_43【前端展示】
- 下一篇: 实战SSM_O2O商铺_45【Redis