加密密碼

package jp.co.smile.common;

import java.io.IOException;
import java.security.*;

/***
* 作者:焦緒進
* 日期:20060804
* 說明:採用摘要算法,由於摘要算法不可逆,所以不容易破解
* 請使用encrypt()方法加密數據,該方法返回加密後的數據
* 然後將該數據存入數據庫,字段長度至少>8 (儘量要長些)
* 方法checkDataSame()驗證普通字符串是否與加密字符串“相等”
* 請自行刪除“測試”的代碼及方法
*/
public class PwdCheck {

/**
* 參數:String strPwd 參數爲待加密的數據
* 功能:加密數據
* 說明:採用摘要算法,由於摘要算法不可逆,所以不容易破解
* */
public String encrypt(String strPwd) {

try {
//摘要算法SHA-1
java.security.MessageDigest alga=java.security.MessageDigest.getInstance("SHA-1");
alga.update(strPwd.getBytes());

byte[] digesta=alga.digest();

return byte2hex(digesta);

} catch (java.security.NoSuchAlgorithmException ex) {

System.out.println("非法摘要算法");
return "加密出錯";
}

}

/**
* 參數:strPwdDB 爲從數據庫取出來的已加密字符串
* 參數:strPwdInput 爲從頁面取來的用戶輸入的字符串
* 說明:兩字符串相等返回true,否則返回false
* */
public boolean checkDataSame(String strPwdDB, String strPwdInput) {

try {

java.security.MessageDigest algb=java.security.MessageDigest.getInstance("SHA-1");
algb.update(strPwdInput.getBytes());

String parameter2 = byte2hex(algb.digest());

//測試用
System.out.println("你剛纔輸入的密碼已被加密成: " + parameter2);
//測試用
System.out.println("正在驗證你輸入的密碼......");

if (strPwdDB.equals(parameter2)) {
return true;
} else {
return false;
}
} catch (java.security.NoSuchAlgorithmException ex) {
System.out.println("非法摘要算法");
return false;
}
}

/**
*二進制轉字符串
*把二進制數組轉換成十六進制串,用:號隔開
*一個字節(8位)對應於一個兩位的十六進制數
*/
public String byte2hex(byte[] b) {

String hs="";
String stmp="";

for (int n=0;n<b.length;n++) {

stmp=(java.lang.Integer.toHexString(b[n] & 0XFF));

if (stmp.length()==1) hs=hs+"0"+stmp;

else hs=hs+stmp;

if (n<b.length-1) hs=hs+":";

}

return hs.toUpperCase();
}

/**
* 該方法爲測試用
* */
public static void main(String[] args) {

byte[] yourInput = new byte[16];
PwdCheck my = new PwdCheck();
//請輸入“這是被加密的數據”與“數據庫”中的數據進行比較
String getDataFromDB = my.encrypt("這是被加密的數據");

System.out.println("從數據庫取得的加密數據爲: " + getDataFromDB);
System.out.println("請輸入密碼: ");

try {

System.in.read(yourInput, 0, 16);
} catch (IOException e) {
e.printStackTrace();
}

System.out.println("你剛纔輸入的密碼是: " + new String(yourInput));

//驗證密碼的有效性
if (my.checkDataSame(getDataFromDB, new String(yourInput))) {
System.out.println("密碼正確!");
} else {
System.out.println("你輸入的密碼不正確!");
}
}

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章