單向加密與雙向加密
- 雙向加密是加密算法中最常用的,它將可以直接理解的明文數據加密爲不可直接理解的密文數據,然後,在需要的時候,可以使用一定的算法將這些加密以後的密文解密爲原來可以理解的明文。雙向加密適合於隱祕通信,例如,用戶在網上購物時,需要向網站提交信用卡密碼,用戶當然不希望自己的數據直接在網上明文傳送,因爲這樣很可能被別的用戶“偷聽”,用戶希望自己的信用卡密碼是通過加密以後,再在網絡傳送,因此網站接收到用戶的數據以後,通過解密算法就可以得到準確的信用卡賬號。
- 單向加密只能對數據進行加密,也就是說,沒有辦法對加密以後的數據進行解密。單向加密一般用於數據庫中用戶信息的加密(例如用戶密碼加密)。
MessageDigest(信息摘要)
Java中提供了MessageDigest類,用於實現單向加密較爲簡便。
//信息摘要實現單向加密方法
//參數:str是加密前的字符串,type是加密類型(MD5、SHA1、SHA-256、SHA-512)
//返回值:加密後字符串
public static String encrypt(String str, String type) throws NoSuchAlgorithmException {
/*
* MD5、SHA1、SHA-256、SHA-512
* */
MessageDigest md = MessageDigest.getInstance(type);
/*
* update方法負責加密
* 字符串轉字節數組:str.getBytes("編碼格式")
* */
md.update(str.getBytes());
/*
*獲取摘要結果,加密後的數組
* */
byte[] bs = md.digest();
/*
* 變爲16進制,使用字符串進行拼接
* */
StringBuilder res = new StringBuilder();
for (byte b : bs) {
res.append(String.format("%02X", b));
}
return res.toString();
}
測試
public static void main(String[] args) throws NoSuchAlgorithmException {
String str = "helloworld";
System.out.println("MD5加密結果:"+encrypt(str,"MD5"));
System.out.println("SHA1加密結果:"+encrypt(str,"SHA1"));
System.out.println("SHA-256加密結果:"+encrypt(str,"SHA-256"));
System.out.println("SHA-512加密結果:"+encrypt(str,"SHA-512"));
}