<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    當柳上原的風吹向天際的時候...

    真正的快樂來源于創(chuàng)造

      BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
      368 Posts :: 1 Stories :: 201 Comments :: 0 Trackbacks
    以下文章屬于老調重彈,您如果對MD5的使用已經(jīng)熟悉請不要往下看以免浪費寶貴時間。

    登錄Web系統(tǒng)時通常都采用用戶名和密碼的形式,如果這樣的數(shù)據(jù)以明碼的方式放在數(shù)據(jù)庫中的話無疑會給別有用心的人以可趁之機,所以采取一定的防范措施是必要的。

    現(xiàn)在比較安全的方式是用MD5進行加密,利用Apache commons的DigestUtils工具類我們可以迅速做到這一點。
    要得到Apache commons的DigestUtils工具類,你必須加載commons-codec-1.x.jar包,我使用的是commons-codec-1.3.jar。使用的具體類是:org.apache.commons.codec.digest.DigestUtils.

    下面,我們的任務是,當用戶注冊時,將他注冊的密碼加密后存入數(shù)據(jù)庫,下面請見具體代碼:
     1 // 對密碼進行加密,加密后再通過Hibernate往數(shù)據(jù)庫里存
     2         String changedPswd=DigestUtils.md5Hex(pswd);
     3         
     4         User user=new User(name,changedPswd,email,brief);
     5         
     6         if(service.hasSameName(name)){
     7             // 同名檢測
     8             request.setAttribute("msg""已經(jīng)有和'"+name+"'同名的用戶存在了,請換個名稱注冊.");
     9             return new ActionForward("/web/page/register.jsp");
    10         }
    11         
    12         if(service.hasSameEmail(email)){
    13             // 同Emial檢測
    14             request.setAttribute("msg""已經(jīng)有和'"+email+"'相同的用戶存在了,請換個Email注冊.");
    15             return new ActionForward("/web/page/register.jsp");
    16         }
    17         
    18         try{
    19             service.create(user);
    20             saveUserRegisterInforToLog(user,request);
    21             request.setAttribute("msg"""+name+",歡迎您的加盟.???????¼???");
    22             return new ActionForward("/web/page/login.jsp");
    23         }
    24         catch(Exception ex){
    25             String str="創(chuàng)建用戶時遇到未預計的異常,具體的異常信息為'"+ex.getMessage()+"',請與系統(tǒng)維護人員聯(lián)系.";
    26             request.setAttribute("msg",str );
    27             logger.fatal(str);
    28             return new ActionForward("/web/page/register.jsp");
    29         }

    以上第二行代碼是進行MD5加密的處理,如果用戶輸入的密碼是123456789,則會得到25f9e794323b453885f5181f1b624d0b這樣的字符串。

    注冊用戶后,數(shù)據(jù)庫中您將看到如下的對應記錄,看到這樣的文字,要去反猜原始密碼是非常困難的,當然您有山東大學王小云教授的本事則不費吹灰之力。


    下面,我們還要對登錄時做一番處理,因為登錄時用的是原始密碼,我們應該對它進行加密后再和數(shù)據(jù)庫中的對應字段進行比對,代碼如下:
                User user=objs.get(0);
                
                
    // 得到MD5加密后的密碼
                String changedPswd=DigestUtils.md5Hex(password);
                    
                
    // 再與數(shù)據(jù)庫中用戶密碼進行比對
                if(user.getPassword().equals(changedPswd)==false){
                    
    throw new ErrorPswdException("密碼不匹配.");
                }
    else{
                    
    return user;


                }

    以上代碼中,password是用戶在頁面輸入的原始密碼,changedPswd是經(jīng)過MD5加密后的密碼,user是按名稱查詢出來的用戶,他的密碼部分就是已經(jīng)經(jīng)過MD5加密的,我們拿這兩個密碼進行比對即可。

    之所以沒有反向還原是因為MD5加密和Base64不一樣,前者是不可逆的,后者則可以還原。當然,Base64不是嚴格意義上的加密手段。

    最后的問題,如果數(shù)據(jù)庫中原有數(shù)據(jù)未經(jīng)加密怎么辦,好在MySql數(shù)據(jù)庫提供了md5函數(shù)幫我們做到這一點,使用update projectmanager_user set pswd=md5(pswd) 這樣的語句就可以將原來數(shù)據(jù)庫中的密碼部分用MD5加密了。

    下面的圖片演示了這一過程:

    原始數(shù)據(jù):


    使用update projectmanager_user set pswd=md5(pswd)加密后的數(shù)據(jù)庫記錄:


    到此啰嗦完了,感謝您看到這里。
    posted on 2010-11-27 13:56 何楊 閱讀(7915) 評論(4)  編輯  收藏

    Feedback

    # re: 使用MD5對存放在數(shù)據(jù)庫中用戶密碼進行保護 2012-02-13 10:25 asd
    既然能打開數(shù)據(jù)數(shù),人家可以直接把密碼改了  回復  更多評論
      

    # re: 使用MD5對存放在數(shù)據(jù)庫中用戶密碼進行保護 2012-02-13 10:53 何楊
    @asd

    你說的有道理。

    可以用MD5的方式生成一個新密碼,再用update語句進行替換原密碼操作就可以了。

    因此數(shù)據(jù)庫也應該有自己的保護措施。  回復  更多評論
      

    # re: 使用MD5對存放在數(shù)據(jù)庫中用戶密碼進行保護 2015-11-20 09:25 發(fā)給
    發(fā)送到發(fā)送到第三方是的  回復  更多評論
      

    # re: 使用MD5對存放在數(shù)據(jù)庫中用戶密碼進行保護[未登錄] 2016-08-09 13:17 Dr
    請問一下你那個service.hasSameName(name) 里面的service 是哪里得到的?  回復  更多評論
      


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導航:
     
    主站蜘蛛池模板: 亚洲Aⅴ无码专区在线观看q| 亚洲日韩国产成网在线观看| 国产午夜亚洲精品不卡免下载| 亚洲fuli在线观看| 亚洲av色香蕉一区二区三区| 精品久久亚洲一级α| 中文字幕成人免费高清在线视频| 国产精品免费在线播放| 免费观看激色视频网站bd| 四虎成人精品在永久免费| 国产成A人亚洲精V品无码性色| 亚洲视频在线观看不卡| 特级一级毛片免费看| 免费A级毛片av无码| 国产精品久久久久影院免费| 亚洲日韩精品A∨片无码| 亚洲人片在线观看天堂无码| a毛片免费观看完整| 日本一道高清不卡免费| 亚洲an日韩专区在线| 国产裸体美女永久免费无遮挡| AA免费观看的1000部电影| 精品亚洲一区二区三区在线播放| 77777亚洲午夜久久多喷| 在线看片免费人成视频久网下载| 国产精品视_精品国产免费| 亚洲国产精品久久久久秋霞影院| 国产AV日韩A∨亚洲AV电影| 国产精品久久久久免费a∨| 亚洲成人中文字幕| 色www永久免费网站| ZZIJZZIJ亚洲日本少妇JIZJIZ| 极品色天使在线婷婷天堂亚洲 | 一级一级一级毛片免费毛片| 毛片免费视频在线观看| 亚洲女人影院想要爱| 亚洲视频在线免费播放| 亚洲人成网址在线观看| 午夜不卡久久精品无码免费| 亚洲成AV人片在线观看无码| 两个人看的www免费视频中文|