最近項目中有個小的需求,配置文件中配置有DB密碼,客戶擔心xml文件被非法竊取,所以要求配置文件中的密碼是經過加密的。這就有個問題,常用的MD5加密,理論上是不可逆的。所以簡單寫了一個加密解密方法。
加密是使用的shell腳本,當然使用java代碼也可以。作用就是運維人員輸入原密碼,生成加密後的密文。然後配置即可,程序中根據約定的解密方式去解讀密文,還原爲可用密碼。這樣即使配置文件被盜用也無法獲知原密碼。
解密方法如下:
/**
* 解密
* @param param
* @return
*/
public static String AsciiToStr(String param) {
String str = "";
String asciiPsw=param;//字符串
if (asciiPsw.length() > 10) {
asciiPsw = asciiPsw.substring(10) + asciiPsw.substring(0, 10);
}
System.out.println("\n恢復原密碼\n----------------------");
// 密碼位數
Integer pswLength = asciiPsw.length()/3;
for (int i = 0;i < pswLength;i++) {
// 三位拆分、分別減101
Integer intPsw = Integer.valueOf(asciiPsw.substring(3*i, 3*(i+1))) - 101;
str = str + (char)Integer.parseInt(String.valueOf(intPsw));
}
return str;
}
加密 shell腳本如下
- #!/bin/sh
- #輸入密碼
- echo "請輸入原密碼:"
- read resultFirst
- firstPWD=$resultFirst
- echo "請再次輸入原密碼:"
- read resultSecond
- secondPWD=$resultSecond
- result=""
- output=""
- function encryptPWD() {
- for ((i=0;i<${#firstPWD};i++));do
- #獲取輸入每一個字符並轉換爲ASCII碼
- letter=`printf "%d" "'${firstPWD:$i:1}"`
- let letter=letter+101
- result+=$letter
- done
- #判斷ASCII碼長度
- if [ ${#result} -lt 10 ];then
- output=${result}
- echo "您的密碼太簡單,建議加深密碼難度!!!"
- else
- output=${result:(${#result}-10):${#result}}${result:0:(${#result}-10)}
- fi
- }
- if [ "$firstPWD" = "$secondPWD" ];then
- encryptPWD
- echo "您的加密後密碼爲:"
- echo $output
- else
- echo "您兩次密碼輸入不正確!"
- fi