国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > JSP > 正文

Java Web開(kāi)發(fā)之MD5加密用法分析

2024-09-05 00:22:18
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
這篇文章主要介紹了Java Web開(kāi)發(fā)之MD5加密用法,較為詳細(xì)的分析了JSP采用MD5加密的功能、特點(diǎn)及實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
 

本文實(shí)例講述了Java Web開(kāi)發(fā)之MD5加密用法。分享給大家供大家參考。具體如下:

MD5是Message Digest 5的縮寫(xiě),是一種加密算法,能夠?qū)ψ止?jié)數(shù)組進(jìn)行加密,有如下特點(diǎn):

① 不能根據(jù)加密后的信息找加密之前的信息;
② 加密后的結(jié)果是128位;
③ 對(duì)于給定的字節(jié)數(shù)組,不管什么時(shí)候采用這種加密算法,結(jié)果是相同的;
④ 對(duì)于不同的字節(jié)數(shù)組,加密的結(jié)果是不相同的。

在Web應(yīng)用中通常需要對(duì)用戶(hù)設(shè)置的密碼進(jìn)行加密之后再存儲(chǔ),否則數(shù)據(jù)庫(kù)管理員能夠看到明文的密碼,并且密碼也有被黑客獲取的危險(xiǎn)。

可以使用MD5對(duì)用戶(hù)的密碼進(jìn)行加密。但是有兩種情況,你可能需要使用其他的方法處理:

① 需要保證密碼在傳輸過(guò)程中也是安全的,這時(shí)候通常都使用https,幾乎所有的銀行網(wǎng)站都是這樣,相對(duì)來(lái)說(shuō)成本比較高。
② 如果網(wǎng)站提供了取回密碼的功能。因?yàn)槭褂肕D5加密之后原來(lái)的密碼是沒(méi)有辦法獲取的。
MD5的應(yīng)用包括如下幾個(gè)過(guò)程:
③ 把要加密的信息轉(zhuǎn)換成字節(jié)數(shù)組;
④ 獲取MessageDigest對(duì)象,該對(duì)象完成加密;
⑤ 使用轉(zhuǎn)換后的字節(jié)數(shù)組初始化MessgeDigest對(duì)象;
⑥ 調(diào)用digest方法進(jìn)行加密,返回byte數(shù)組;
⑦ 把byte數(shù)組轉(zhuǎn)換成字符串,然后就可以使用加密后的字符串了。

假設(shè)原來(lái)的字符串為oldStr,內(nèi)容為“lixucheng”,加密后的字符串為newStr。具體過(guò)程分別介紹如下。

1、把字符串轉(zhuǎn)換成字節(jié)數(shù)組

可以使用字符串的getBytes方法進(jìn)行轉(zhuǎn)換,例如:

復(fù)制代碼代碼如下:
byte[] oldBytes = oldStr.getBytes();

數(shù)組中的數(shù)據(jù):108 105 120 117 99 104 101 110 103

 

2、獲取MessgaeDigest對(duì)象

使用MessageDigest的getInstance(String str)方法得到MessgeDigest對(duì)象,參數(shù)使用MD5。例如:

復(fù)制代碼代碼如下:
MessageDigest md = MessageDigest.getInstance("MD5");

3、使用轉(zhuǎn)換后的字節(jié)數(shù)組初始化MessgeDigest對(duì)象

 

使用update方法進(jìn)行初始化,參數(shù)為轉(zhuǎn)換后的字節(jié)數(shù)組。例如:

復(fù)制代碼代碼如下:
md.update(oldBytes);

4、調(diào)用digest方法進(jìn)行加密

 

方法返回的是字節(jié)數(shù)組。例如:

復(fù)制代碼代碼如下:
byte[] newBytes = md.digest();

數(shù)組中的數(shù)據(jù)(16位):-22 1 35 121 -120 65 114 75 127 -34 31 -21 51 -37 -97 -118
5、轉(zhuǎn)換成16進(jìn)制表示的字符串

 

下面的代碼完成轉(zhuǎn)換:
 

  1. // 構(gòu)造長(zhǎng)度為2倍的字符串 
  2. char newStr[] = new char[32]; 
  3. // 循環(huán)進(jìn)行處理 
  4. for (int i = 0; i < 16; i++) { 
  5.  byte tmp = newBytes[i]; 
  6.  newStr[2*i] = hexDigits[tmp >>> 4 & 0xf]; 
  7.  newStr[2*i+1] = hexDigits[tmp & 0xf]; 
?
發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 大渡口区| 上林县| 葫芦岛市| 略阳县| 汝阳县| 遂宁市| 贞丰县| 江津市| 洪洞县| 阿荣旗| 阿勒泰市| 高陵县| 和林格尔县| 颍上县| 房产| 芦溪县| 石嘴山市| 邓州市| 盘锦市| 汝城县| 福泉市| 永城市| 来凤县| 云阳县| 泌阳县| 卫辉市| 定陶县| 雅江县| 墨竹工卡县| 苍山县| 辉南县| 于田县| 远安县| 九台市| 永修县| 禹州市| 高安市| 墨竹工卡县| 盘锦市| 花莲县| 府谷县|