日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

实战SSM_O2O商铺_44【DES加密】 关键配置信息进行DES加密

發布時間:2025/3/21 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 实战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加密的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。