欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java 實現(xiàn)加密數(shù)據(jù)庫連接的步驟

 更新時間:2020年11月09日 09:11:11   作者:月光中的污點  
這篇文章主要介紹了Java 實現(xiàn)加密數(shù)據(jù)庫連接的步驟,幫助大家更好的理解和使用Java處理數(shù)據(jù)庫,感興趣的朋友可以了解下

作者:月光中的污點

原文鏈接:https://www.extlight.com/2017/12/16/Java-%E5%AE%9E%E7%8E%B0%E5%8A%A0%E5%AF%86%E6%95%B0%E6%8D%AE%E5%BA%93%E8%BF%9E%E6%8E%A5/

一、前言

在很多項目中,數(shù)據(jù)庫相關的配置文件內(nèi)容都是以明文的形式展示的,這存在一定的安全隱患。

在開發(fā)和維護項目時,不僅要關注項目的性能,同時也要注重其安全性。

二、實現(xiàn)思路

我們都知道項目啟動時,Spring 容器會加載配置文件并讀取文件中的內(nèi)容,那么我們可以下邊步驟操作:

通過 DES 算法加密連接數(shù)據(jù)庫的賬號和密碼并將加密后的密文寫到 db 配置文件中。

在 Spring 讀取 db 配置文件時將密文解密回明文。

三、實現(xiàn)編碼

3.1 加密工具類

DESUtil 類:

public class DESUtil {

 private static Key key;
 private static String KEY_STR = "myKey";
 private static String CHARSETNAME = "UTF-8";
 private static String ALGORITHM = "DES";

 static {
  try {
   KeyGenerator generator = KeyGenerator.getInstance(ALGORITHM);
   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);
  }
 }

 /**
  * 加密
  * @param str
  * @return
  */
 public static String getEncryptString(String str) {
  BASE64Encoder base64encoder = new BASE64Encoder();
  try {
   byte[] bytes = str.getBytes(CHARSETNAME);
   Cipher cipher = Cipher.getInstance(ALGORITHM);
   cipher.init(Cipher.ENCRYPT_MODE, key);
   byte[] doFinal = cipher.doFinal(bytes);
   return base64encoder.encode(doFinal);
  } catch (Exception e) {
   // TODO: handle exception
   throw new RuntimeException(e);
  }
 }

 /**
  * 解密
  * @param str
  * @return
  */
 public static String getDecryptString(String str) {
  BASE64Decoder base64decoder = new BASE64Decoder();
  try {
   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);
  }
 }
}

通過上邊的工具類對連接數(shù)據(jù)庫的賬號密碼進行加密。筆者主機上連接數(shù)據(jù)庫的賬號和密碼分別是 “root” 和 “tiger”。

經(jīng)過加密后得到 “WnplV/ietfQ=” 和 “xyHEykQVHqA=” 。

db.properties 配置文件完整內(nèi)容如下:

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf-8&allowMultiQueries=true&serverTimezone=UTC
jdbc.username=WnplV/ietfQ=
jdbc.password=xyHEykQVHqA=

3.2 配置文件解析類

EncryptPropertyPlaceholderConfigurer 類:

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 = DESUtil.getDecryptString(propertyValue);
   return decryptValue;
  } else {
   return propertyValue;
  }
 }

 private boolean isEncryptProp(String propertyName) {
  for (String encryptpropertyName : encryptPropNames) {
   if (encryptpropertyName.equals(propertyName))
    return true;
  }
  return false;
 }
}

3.3 Spring 配置文件

applicationContext-mybatis.xml 部分內(nèi)容:

<!-- <context:property-placeholder location="classpath:*.properties"/> -->
 
<bean class="com.light.ac.common.configuration.EncryptPropertyPlaceholderConfigurer">
 <property name="locations">
  <list>
   <value>classpath:db.properties</value>
  </list>
 </property>
 <property name="fileEncoding" value="UTF-8"/>
</bean>

未加密明文前,使用的是 <context:property-placeholder /> 加載 db 配置文件。

加密明文后,使用配置文件解析類加載 db 配置文件。

完成上述 3 個步驟后按照往常操作,直接運行項目即可。

四、總結

起初,在不了解實現(xiàn)思路前覺得這功能很神秘和高大尚。但是,理清思路后功能實現(xiàn)起來就非常簡單了。

作為程序員不能被神秘的表象驚嘆而“望而卻步”,需要學會思考和理清思路,這樣才能不斷提升自身能力。

以上就是Java 實現(xiàn)加密數(shù)據(jù)庫連接的步驟的詳細內(nèi)容,更多關于Java 實現(xiàn)加密數(shù)據(jù)庫連接的資料請關注腳本之家其它相關文章!

相關文章

  • SpringBoot事務異步調(diào)用引發(fā)的bug解決

    SpringBoot事務異步調(diào)用引發(fā)的bug解決

    本文主要介紹了SpringBoot事務異步調(diào)用引發(fā)的bug解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-06-06
  • 配置了jdk的環(huán)境idea卻提示找不到jdk解決辦法

    配置了jdk的環(huán)境idea卻提示找不到jdk解決辦法

    在使用Java編程語言進行開發(fā)時,IDEA是一個非常流行和強大的集成開發(fā)環(huán)境,這篇文章主要給大家介紹了關于配置了jdk的環(huán)境idea卻提示找不到jdk的解決辦法,需要的朋友可以參考下
    2023-12-12
  • 關于單例模式懶漢式和餓漢式的區(qū)別及說明

    關于單例模式懶漢式和餓漢式的區(qū)別及說明

    這篇文章主要介紹了關于單例模式懶漢式和餓漢式的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • java 集合----Map、Collection

    java 集合----Map、Collection

    HashSet 的 add() 方法添加集合元素時實際上轉(zhuǎn)變?yōu)檎{(diào)用 HashMap 的 put()方法來添加 key-value 對。HashMap 的 put() 方法.hashCode() 判斷返回值相等,如果返回值相等則再通過 equals 比較也返回 true,最終認為key對象是相等的已經(jīng)在HashMap中存在。
    2016-04-04
  • SpringBoot執(zhí)行定時任務@Scheduled的方法

    SpringBoot執(zhí)行定時任務@Scheduled的方法

    這篇文章主要介紹了SpringBoot執(zhí)行定時任務@Scheduled的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • springboot 接口版本區(qū)分方式

    springboot 接口版本區(qū)分方式

    這篇文章主要介紹了springboot 接口版本區(qū)分方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • IntelliJ?IDEA?2022.2最新版本激活教程(親測可用版)永久激活工具分享

    IntelliJ?IDEA?2022.2最新版本激活教程(親測可用版)永久激活工具分享

    Jetbrains官方發(fā)布了?IntelliJ?IDEA2022.2?正式版,每次大的版本更新,都會有較大的調(diào)整和優(yōu)化,除本次更新全面擁抱?Java?17?外,還有對IDE?UI界面,安全性,便捷性等都做了調(diào)整和優(yōu)化完善,用戶體驗提升不少,相信后面會有不少小伙伴跟著更新
    2022-08-08
  • java實現(xiàn)文件的上傳功能

    java實現(xiàn)文件的上傳功能

    這篇文章主要為大家詳細介紹了java實現(xiàn)文件的上傳功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Spring中的路徑匹配器AntPathMatcher詳解

    Spring中的路徑匹配器AntPathMatcher詳解

    這篇文章主要介紹了Spring中的路徑匹配器AntPathMatcher詳解,Spring的PathMatcher路徑匹配器接口,用于支持帶通配符的資源路徑匹配,本文提供了部分實現(xiàn)代碼,需要的朋友可以參考下
    2023-09-09
  • Java數(shù)據(jù)長度獲取方式對比之length屬性、length()和size()方法詳解

    Java數(shù)據(jù)長度獲取方式對比之length屬性、length()和size()方法詳解

    在Java編程語言中l(wèi)ength、length()和size()是三個常見的用來獲取不同數(shù)據(jù)類型對象長度或大小的方法,但它們各自適用于不同的上下文,這篇文章主要給大家介紹了關于Java數(shù)據(jù)長度獲取方式對比之length屬性、length()和size()方法詳解
    2024-07-07

最新評論