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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

java连加密的mysql_Java 实现加密数据库连接

發布時間:2025/3/8 数据库 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java连加密的mysql_Java 实现加密数据库连接 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、前言

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

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

二、實現思路

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

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

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

三、實現編碼

3.1 加密工具類

DESUtil 類:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57public 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);

}

}

}

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

經過加密后得到 “WnplV/ietfQ=” 和 “xyHEykQVHqA=” 。

db.properties 配置文件完整內容如下:

1

2

3

4jdbc.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 類:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23public 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 部分內容:

1

2

3

4

5

6

7

8

9

10

classpath:db.properties

未加密明文前,使用的是 加載 db 配置文件。

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

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

四、總結

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

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

總結

以上是生活随笔為你收集整理的java连加密的mysql_Java 实现加密数据库连接的全部內容,希望文章能夠幫你解決所遇到的問題。

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