Java--基于Java編寫的數據庫加解密工具包(附)GitHub源碼

      網友投稿 966 2022-05-25

      GitHub源碼地址:https://github.com/JustinJava/pwd-encrypt-decrypt

      (圖1)項目應用場景

      (圖2)SHELL腳本應用場景

      一、背景介紹

      如上圖1和圖2標記部分所示,項目中數據庫連接配置的密碼密文和SHELL腳本中的動態密文,就是基于本工具包實現的~

      不知道你的項目數據庫連接配置,是不是還在用明文密碼或者SHELL腳本直接寫死數據庫連接密碼?

      如果是的話,那不妨試試來了解了解下這個工具包,簡單、使用、安全~

      關于工具包介紹和說明,可以看下我GitHub上的README.md文檔

      本博文主要介紹如何使用該基于Java編寫的加解密工具包及一些應用場景~

      僅供學習和參考,個人能力有限,有不足的地方,歡迎多多糾正和建議~

      最后如果覺得有用的話,幫忙點個贊,Thanks?(?ω?)?

      二、快速上手(項目應用場景)

      2.1、下載源碼

      git clone https://github.com/JustinJava/pwd-encrypt-decrypt.git

      2.2、明文加密

      將下載好的pwd-encrypt-decrypt工程導入idea或eclipse,按實際更新MainTest.java測試類中的IP、用戶、密碼數據庫信息,并運行測試類。

      MainTest.java測試類

      package com.justin; /** * 密碼加解密測試類 */ public class MainTest { private final static String HOST="127.0.0.1"; //數據庫IP private final static String USER = "root"; //數據庫用戶 private final static String PASSWORD = "abc@123456"; //數據庫密碼 public static void main(String[] args) { //初始化加密需要的參數 args = encryptInitParam(args); //初始化解密需要的參數 //args = decryptInitParam(args); //加解密的主入口 Main.main(args); } /** * 初始化加密需要的參數 * @param args * @return */ private static String[] encryptInitParam(String[] args) { args = new String[3]; args[0] = HOST; args[1] = USER; args[2] = PASSWORD; return args; } /** * 初始化解密需要的參數 * @param args * @return */ private static String[] decryptInitParam(String[] args) { args = new String[2]; args[0] = HOST; args[1] = USER; return args; } }

      生成的密碼解密文件為encrypt.pass,默認生成在編譯目錄下

      2.3、密文解密

      測試解密,將encrypt.pass加密文件中的整行密文字符串,拷貝到DecryptTest.java類中進行測試。

      DecryptTest.java測試類

      /** * @program: DataStructures * @description: 數據庫密文解密測試類 * @author: JustinQin * @create: 2021/7/18 20:07 * @version: v1.0.0 **/ public class DecryptTest { public static void main(String[] args) { String dePass = "127.0.0.1:root:C33D583B7575AF82FFDCE895C9F5E8FA:E5DBAC8F8FFF3EA5DC670221DAF820B3:DC9AB9C2382A04F2A479891CF9B411C9"; IDecrypt decrypt = new Decrypt(); String password = null; try { password = decrypt.getDepass(dePass); } catch (Exception e) { throw new RuntimeException("數據庫密文解密失敗:" + e.getMessage()); } System.out.print(password); } }

      如下圖所示,表示解密成功

      2.4、生成工具包

      完成了明文加密、密文解密說明對源碼的驗證完成了,可以將工程pwd-encrypt-decrypt導出為一個jar包,可根據實際需要自行命名架包,這里我命名為pwd.jar

      2.5、導入工具包

      將生成的工具包pwd.jar手動依賴到自己的項目中,不知道的小伙伴可自行百度搜索下idea或eclipse中Java項目如何手動導入jar包~

      2.6、配置jdbc.properties或yml

      修改項目數據庫配置文件jdbc.properties或application.yml(springboot工程)文件中的app-data-source.password = ***數據庫密碼為encrypt.pass加密文件中得到的密文

      配置如下:

      #數據庫連接驅動 app-data-source.driverClassName=com.mysql.jdbc.Driver #數據庫連接url app-data-source.url=jdbc:mysql://localhost:3306/test?useSSL=false&characterEncoding=UTF-8 #數據庫用戶 app-data-source.username=root #數據庫用戶密碼(加密) app-data-source.password=127.0.0.1:root:C33D583B7575AF82FFDCE895C9F5E8FA:E5DBAC8F8FFF3EA5DC670221DAF820B3:DC9AB9C2382A04F2A479891CF9B411C9 #連接池初始化大小 app-data-source.initialSize=10 #連接池最大數量 app-data-source.maxActive=50 #連接池最大空閑 app-data-source.maxIdle=20 #連接池最小空閑 app-data-source.minIdle=5 #獲取連接最大等待時間 app-data-source.maxWait=30000

      2.7、自定義數據源

      自定義DataSource數據源類,主要用于將配置中讀取到的數據庫密碼密文進行解密

      常用的數據源有基于tomcat jdbc連接池的數據源、基于dbcp連接池的數據源、基于阿里druid連接池的數據源等,這里以基于tomcat jdbc連接池的數據源為例:

      TomcatDataSource自定義數據源類

      package com.justin.datasource; import org.apache.tomcat.jdbc.pool.DataSource; import com.justin.pass.IDecryptPass; import com.justin.pass.impl.DecryptPass; /** * Desc: decrypt the tomcat pool's db password * @author JustinQin * */ public class TomcatDataSource extends DataSource{ @Override public void setPassword(String password) { IDecryptPass decryptPass = new DecryptPass(); String decryptStr; try { decryptStr = decryptPass.getDepass(password); this.poolProperties.setPassword(decryptStr); this.poolProperties.getDbProperties().setProperty("password", this.poolProperties.getPassword()); super.setPassword(decryptStr); } catch (Exception e) { e.printStackTrace(); } } }

      2.8、修改配置mybatis.xml

      將數據源聲明部分的class指向自定義的數據源TomcatDataSource類的全路徑(包名+類名)

      工具包整合到項目中完成,重啟應用驗證是否正常~~

      三、快速上手(SHELL腳本應用場景)

      2.1、上傳工具包

      將上傳工具包pwd.jar到服務器,shell腳本一般都是放在Linux服務器多一些,例如這里存放路徑為:

      /home/tomcat/password/pwd.jar

      2.2、工具包(測試)

      生成密碼密文文件(測試)

      cd /home/tomcat/password $JAVA_HOME/bin/java -jar pwd.jar 127.0.0.1 root abc@123456

      執行以上命令,看到提示如下圖所示,表示生成encrypt.pass密文文件成功

      對密鑰文件進行解密(測試)

      cd /home/tomcat/password $JAVA_HOME/bin/java -jar pwd.jar 127.0.0.1 root | tail -n 1

      執行以上命令,看到如下圖所示,表示解密成功~

      這里需要注意的是tail -n 1表示取輸出結果的最后一行,因為pwd.jar工具包前面會輸出一些其他的日志,明文密碼在最后一行

      2.3、工具包(規范)

      前面的工具包(測試),直接將密碼寫在命令行了,JDK路徑和工具包路徑也是寫死的,實際生產這樣使用的話不太規范,這里需要寫個加解密腳本,將密碼寫在文件中,JDK路徑從環境變量中獲取,這樣更加安全和規范一些。

      加密腳本setPass.sh

      #!/bin/sh filePath=/home/tomcat/password/pwd.jar dbHost= dbUser= dbPassword=abc@123456 $JAVA_HOME/bin/java -jar $filePath $dbHost $dbUser $dbPassword

      加密命令(密碼根據實際在setPass.sh中配置):sh /home/tomcat/password/setPass.sh 127.0.0.1 root

      解密腳本getPass.sh

      #!/bin/sh filePath=/home/tomcat/password/pwd.jar dbHost= dbUser= $JAVA_HOME/bin/java -jar $filePath $dbHost $dbUser | tail -n 1

      解密命令:sh /home/tomcat/password/getPass.sh 127.0.0.1 root

      2.4、實際使用

      按工具包(規范)進行配置完成后,當需要在shell腳本中使用數據庫密碼連接數據庫時,不再將數據庫明文密碼直接在shell腳本中,而是直接通過命令sh /home/tomcat/password/getPass.sh 127.0.0.1 root獲取到動態密文,實際就是對密文進行解密得到密碼明文

      SHELL腳本示例(查詢MySQL數據庫數據表數據):

      Java--基于Java編寫的數據庫加解密工具包(附)GitHub源碼

      重點關注DECRYPT_PASSWD **這一行動態密文的解密方式~

      selectDemoInfo.sh

      #!/bin/sh #說明: 該腳本主要是測試通過解密加密密文方式是否能正常連接到MySQL,并查詢數據庫test數據表demo_info的數據 DB_IP="127.0.0.1" DB_NAME="test" DB_USER="root" DECRYPT_PASSWD=`sh /home/tomcat/password/getPass.sh 127.0.0.1 root` DB_PASSWD="$DECRYPT_PASSWD" if ! mysql -h$DB_IP -u$DB_USER -p$DB_PASSWD <

      執行腳本 sh selectDemoInfo.sh

      如下圖所示,表示查詢MySQL數據庫數據表成功!!!

      附錄(資源)

      SHELL腳本應用場景測試用到相關文件如下圖:

      網盤下載鏈接:https://pan.baidu.com/s/1szqZN7CwijyBU3g58QRrvQ

      提取碼:pxwx

      覺得有用的小伙伴點個贊,歡迎評論區留言~

      跪求上GitHub點個Star~

      https://github.com/JustinJava/pwd-encrypt-decrypt

      原創不易,覺得有用的小伙伴來個三連(++評論 )+關注支持一下,非常感謝~

      Git Java 數據庫

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:程序員的520花式繪制愛心代碼大全
      下一篇:前后端分離實踐
      相關文章
      亚洲国产成人精品久久| 久久久久久A亚洲欧洲AV冫| 亚洲自偷自偷图片| 亚洲国产a级视频| 国产精品亚洲综合一区在线观看 | 亚洲自偷自偷偷色无码中文| 亚洲av永久中文无码精品综合 | 色婷婷六月亚洲综合香蕉| 国产亚洲精品影视在线| 亚洲免费二区三区| 亚洲一卡2卡3卡4卡国产网站| 亚洲精品视频在线观看视频| 久久精品国产亚洲av日韩| 亚洲精品福利视频| 亚洲一区二区三区四区在线观看| 亚洲AV无码专区国产乱码4SE| 亚洲av中文无码乱人伦在线r▽ | 久久精品国产亚洲av水果派| 亚洲午夜免费视频| 久久精品九九亚洲精品| 亚洲午夜精品国产电影在线观看| 亚洲综合免费视频| wwwxxx亚洲| 亚洲欧美自偷自拍另类视| 亚洲精品美女久久久久久久| 亚洲精品人成网线在线播放va| 精品无码专区亚洲| 亚洲精品无码久久毛片| 丁香五月亚洲综合深深爱| 亚洲精品国产品国语在线| 久久精品国产精品亚洲蜜月| 亚洲2022国产成人精品无码区| 久久综合亚洲鲁鲁五月天| 亚洲国产成+人+综合| 亚洲综合精品伊人久久| 亚洲精品乱码久久久久蜜桃| 亚洲Av无码乱码在线znlu| 亚洲中文字幕无码久久综合网| 久久精品国产亚洲AV果冻传媒| 亚洲天堂一区二区三区| 亚洲人成自拍网站在线观看|