在各種應用系統的開發中,經常需要存儲用戶信息,很多地方都要存儲用戶密碼,而將用戶密碼直接存儲在服務器上顯然是不安全的,本文簡要介紹工作中常用的MD5加密算法,希望能拋磚引玉。
(一)消息摘要簡介
一個消息摘要就是一個數據塊的數字指紋。即對一個任意長度的一個數據塊進行計算,產生一個唯一指印(對於SHA1是產生一個20字節的二進制數組)。消息摘要是一種與消息認證碼結合使用以確保消息完整性的技術。主要使用單向散列函數算法,可用於檢驗消息的完整性,和通過散列密碼直接以文本形式保存等,目前廣泛使用的算法有MD4、MD5、SHA-1。
消息摘要有兩個基本屬性:
兩個不同的報文難以生成相同的摘要
難以對指定的摘要生成一個報文,而可以由該報文反推算出該指定的摘要
代表:美國國家標準技術研究所的SHA1和麻省理工學院Ronald Rivest提出的MD5
(二)對字符串進行加密
/**利用MD5進行加密* @param str 待加密的字符串* @return 加密後的字符串* @throws NoSuchAlgorithmException 沒有這種產生消息摘要的算法* @throws UnsupportedEncodingException */ public String EncoderByMd5(String str) throws NoSuchAlgorithmException, UnsupportedEncodingException{ //確定計算方法MessageDigest md5=MessageDigest.getInstance("MD5"); BASE64Encoder base64en = new BASE64Encoder(); //加密後的字符串String newstr=base64en.encode(md5.digest(str.getBytes("utf-8"))); return newstr; }調用函數:
String str="0123456789"
System.out.println(EncoderByMd5(str));
輸出:eB5eJF1ptWaXm4bijSPyxw==
(三)驗證密碼是否正確
因為MD5是基於消息摘要原理的,消息摘要的基本特徵就是很難根據摘要推算出消息報文,因此要驗證密碼是否正確,就必須對輸入密碼(消息報文)重新計算其摘要,和數據庫中存儲的摘要進行對比(即數據庫中存儲的其實為用戶密碼的摘要),若兩個摘要相同,則說明密碼正確,不同,則說明密碼錯誤。
/**判斷用戶密碼是否正確* @param newpasswd 用戶輸入的密碼* @param oldpasswd 數據庫中存儲的密碼--用戶密碼的摘要* @return * @throws NoSuchAlgorithmException * @throws UnsupportedEncodingException */ public boolean checkpassword(String newpasswd,String oldpasswd) throws NoSuchAlgorithmException, UnsupportedEncodingException{ if(EncoderByMd5(newpasswd).equals(oldpasswd)) return true; else return false; }PS:關於加密技術,本站還提供瞭如下加密工具供大家參考使用:
MD5在線加密工具:http://tools.VeVB.COm/password/CreateMD5Password
Escape加密/解密工具:http://tools.VeVB.COm/password/escapepwd
在線SHA1加密工具:http://tools.VeVB.COm/password/sha1encode
短鏈(短網址)在線生成工具:http://tools.VeVB.COm/password/dwzcreate
短鏈(短網址)在線還原工具:http://tools.VeVB.COm/password/unshorturl
高強度密碼生成器:http://tools.VeVB.COm/password/CreateStrongPassword
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。