java中如何使用MD5進(jìn)行加密
在各種應(yīng)用系統(tǒng)的開發(fā)中,經(jīng)常需要存儲(chǔ)用戶信息,很多地方都要存儲(chǔ)用戶密碼,而將用戶密碼直接存儲(chǔ)在服務(wù)器上顯然是不安全的,本文簡要介紹工作中常用的 MD5加密算法,希望能拋磚引玉。
(一)消息摘要簡介
一個(gè)消息摘要就是一個(gè)數(shù)據(jù)塊的數(shù)字指紋。即對(duì)一個(gè)任意長度的一個(gè)數(shù)據(jù)塊進(jìn)行計(jì)算,產(chǎn)生一個(gè)唯一指印(對(duì)于SHA1是產(chǎn)生一個(gè)20字節(jié)的二進(jìn)制數(shù)組)。消息摘要是一種與消息認(rèn)證碼結(jié)合使用以確保消息完整性的技術(shù)。主要使用單向散列函數(shù)算法,可用于檢驗(yàn)消息的完整性,和通過散列密碼直接以文本形式保存等,目前廣泛使用的算法有MD4、MD5、SHA-1。
消息摘要有兩個(gè)基本屬性:
兩個(gè)不同的報(bào)文難以生成相同的摘要
難以對(duì)指定的摘要生成一個(gè)報(bào)文,而可以由該報(bào)文反推算出該指定的摘要
代表:美國國家標(biāo)準(zhǔn)技術(shù)研究所的SHA1和麻省理工學(xué)院Ronald Rivest提出的MD5
(二)對(duì)字符串進(jìn)行加密
/**利用MD5進(jìn)行加密
* @param str 待加密的字符串
* @return 加密后的字符串
* @throws NoSuchAlgorithmException 沒有這種產(chǎn)生消息摘要的算法
* @throws UnsupportedEncodingException
*/
public String EncoderByMd5(String str) throws NoSuchAlgorithmException, UnsupportedEncodingException{
//確定計(jì)算方法
MessageDigest md5=MessageDigest.getInstance("MD5");
BASE64Encoder base64en = new BASE64Encoder();
//加密后的字符串
String newstr=base64en.encode(md5.digest(str.getBytes("utf-8")));
return newstr;
}
調(diào)用函數(shù):
String str="0123456789"
System.out.println(EncoderByMd5(str));
輸出:eB5eJF1ptWaXm4bijSPyxw==
(三)驗(yàn)證密碼是否正確
因?yàn)镸D5是基于消息摘要原理的,消息摘要的基本特征就是很難根據(jù)摘要推算出消息報(bào)文,因此要驗(yàn)證密碼是否正確,就必須對(duì)輸入密碼(消息報(bào)文)重新計(jì)算其摘要,和數(shù)據(jù)庫中存儲(chǔ)的摘要進(jìn)行對(duì)比(即數(shù)據(jù)庫中存儲(chǔ)的其實(shí)為用戶密碼的摘要),若兩個(gè)摘要相同,則說明密碼正確,不同,則說明密碼錯(cuò)誤。
/**判斷用戶密碼是否正確
* @param newpasswd 用戶輸入的密碼
* @param oldpasswd 數(shù)據(jù)庫中存儲(chǔ)的密碼--用戶密碼的摘要
* @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:關(guān)于加密技術(shù),本站還提供了如下加密工具供大家參考使用:
MD5在線加密工具:http://tools.jb51.net/password/CreateMD5Password
Escape加密/解密工具:http://tools.jb51.net/password/escapepwd
在線SHA1加密工具:http://tools.jb51.net/password/sha1encode
短鏈(短網(wǎng)址)在線生成工具:http://tools.jb51.net/password/dwzcreate
短鏈(短網(wǎng)址)在線還原工具:http://tools.jb51.net/password/unshorturl
高強(qiáng)度密碼生成器:http://tools.jb51.net/password/CreateStrongPassword
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Spring整合Mybatis使用<context:property-placeholder>時(shí)的坑
這篇文章主要介紹了Spring整合Mybatis使用<context:property-placeholder>時(shí)的坑 的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-06-06
Maven?Pom?文件中的隱式依賴導(dǎo)致Jar沖突問題
這篇文章主要介紹了Maven?Pom?文件中的隱式依賴導(dǎo)致Jar沖突問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12
利用Spring Boot如何開發(fā)REST服務(wù)詳解
這篇文章主要給大家介紹了關(guān)于利用Spring Boot如何開發(fā)REST服務(wù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-12-12
將JavaWeb項(xiàng)目部署到云服務(wù)器的詳細(xì)步驟
這篇文章主要介紹了將JavaWeb項(xiàng)目部署到云服務(wù)器的詳細(xì)步驟,文章通過圖文結(jié)合的方式給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-12-12
java數(shù)據(jù)結(jié)構(gòu)排序算法之樹形選擇排序詳解
這篇文章主要介紹了java數(shù)據(jù)結(jié)構(gòu)排序算法之樹形選擇排序,結(jié)合具體實(shí)例形式分析了java樹形選擇排序的原理、實(shí)現(xiàn)技巧與相關(guān)注意事項(xiàng),需要的朋友可以參考下2017-05-05
Java排序之Comparable和Comparator比較器詳解
這篇文章主要介紹了Java排序之Comparable和Comparator比較器詳解,Comparable<T>是內(nèi)部比較器,Comparator<T>是外部比較器,最推薦使用Comparator<T>接口排序,Comparator提供靜態(tài)方法很方便,推薦使用,需要的朋友可以參考下2024-01-01
springMVC實(shí)現(xiàn)圖形驗(yàn)證碼(kaptcha)代碼實(shí)例
這篇文章主要介紹了springMVC實(shí)現(xiàn)圖形驗(yàn)證碼(kaptcha)代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值2019-09-09
JVM調(diào)優(yōu)OutOfMemoryError異常分析
這篇文章主要為大家介紹了JVM調(diào)優(yōu)OutOfMemoryError異常分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11

