亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

MD5的Java Bean實現

2019-11-18 11:35:21
字體:
來源:轉載
供稿:網友
md5簡介

  MD5的全稱是Message-Digest Algorithm 5,在90年代初由MIT的計算機科學實驗室和RSA Data Security Inc發明,經MD2、MD3和MD4發展而來。

  Message-Digest泛指字節串(Message)的Hash變換,就是把一個任意長度的字節串變換成一定長的大整數。請注重我使用了“字節串”而不是“字符串”這個詞,是因為這種變換只與字節的值有關,與字符集或編碼方式無關。

  MD5將任意長度的“字節串”變換成一個128bit的大整數,并且它是一個不可逆的字符串變換算法,換句話說就是,即使你看到源程序和算法描述,也無法將一個MD5的值變換回原始的字符串,從數學原理上說,是因為原始的字符串有無窮多個,這有點象不存在反函數的數學函數。

  MD5的典型應用是對一段Message(字節串)產生fingerPRint(指紋),以防止被“篡改”。舉個例子,你將一段話寫在一個叫readme.txt文件中,并對這個readme.txt產生一個MD5的值并記錄在案,然后你可以傳播這個文件給別人,別人假如修改了文件中的任何內容,你對這個文件重新計算MD5時就會發現。假如再有一個第三方的認證機構,用MD5還可以防止文件作者的“抵賴”,這就是所謂的數字簽名應用。

  MD5還廣泛用于加密和解密技術上,在很多操作系統中,用戶的密碼是以MD5值(或類似的其它算法)的方式保存的, 用戶Login的時候,系統是把用戶輸入的密碼計算成MD5值,然后再去和系統中保存的MD5值進行比較,而系統并不“知道”用戶的密碼是什么。

  一些黑客破獲這種密碼的方法是一種被稱為“跑字典”的方法。有兩種方法得到字典,一種是日常搜集的用做密碼的字符串表,另一種是用排列組合方法生成的,先用MD5程序計算出這些字典項的MD5值,然后再用目標的MD5值在這個字典中檢索。

  即使假設密碼的最大長度為8,同時密碼只能是字母和數字,共26+26+10=62個字符,排列組合出的字典的項數則是P(62,1)+P(62,2)….+P(62,8),那也已經是一個很天文的數字了,存儲這個字典就需要TB級的磁盤組,而且這種方法還有一個前提,就是能獲得目標賬戶的密碼MD5值的情況下才可以。

  在很多電子商務和社區應用中,治理用戶的Account是一種最常用的基本功能,盡管很多application Server提供了這些基本組件,但很多應用開發者為了治理的更大的靈活性還是喜歡采用關系數據庫來治理用戶,懶惰的做法是用戶的密碼往往使用明文或簡單的變換后直接保存在數據庫中,因此這些用戶的密碼對軟件開發者或系統治理員來說可以說毫無保密可言,本文的目的是介紹MD5的java Bean的實現,同時給出用MD5來處理用戶的Account密碼的例子,這種方法使得治理員和程序設計者都無法看到用戶的密碼,盡管他們可以初始化它們。但重要的一點是對于用戶密碼設置習慣的保護。

  有愛好的讀者可以從這里取得MD5也就是RFC 1321的文本。http://www.ietf.org/rfc/rfc1321.txt

  實現策略

  MD5的算法在RFC1321中實際上已經提供了C的實現,我們其實馬上就能想到,至少有兩種用Java實現它的方法,第一種是,用Java語言重新寫整個算法,或者再說簡單點就是把C程序改寫成Java程序。第二種是,用JNI(Java Native Interface)來實現,核心算法仍然用這個C程序,用Java類給它包個殼。

  但我個人認為,JNI應該是Java為了解決某類問題時的沒有辦法的辦法(比如與操作系統或I/O設備密切相關的應用),同時為了提供和其它語言的互操作性的一個手段。使用JNI帶來的最大問題是引入了平臺的依靠性,打破了SUN所鼓吹的“一次編寫到處運行”的Java好處。因此,我決定采取第一種方法,一來和大家一起嘗試一下“一次編寫到處運行”的好處,二來檢驗一下Java 2現在對于比較密集的計算的效率問題。

  實現過程

  限于這篇文章的篇幅,同時也為了更多的讀者能夠真正專注于問題本身,我不想就某一種Java集成開發環境來介紹這個Java Bean的制作過程,介紹一個方法時我發現步驟和命令很清楚,我相信有任何一種Java集成環境三天以上經驗的讀者都會知道如何把這些代碼在集成環境中編譯和運行。用集成環境講述問題往往需要配很多屏幕截圖,這也是我一直對集成環境很頭疼的原因。我使用了一個普通的文本編輯器,同時使用了Sun公司標準的JDK 1.3.0 for Windows NT。

  其實把C轉換成Java對于一個有一定C語言基礎的程序員并不困難,這兩個語言的基本語法幾乎完全一致.我大概花了一個小時的時間完成了代碼的轉換工作,我主要作了下面幾件事:


  把必須使用的一些#define的宏定義變成Class中的final static,這樣保證在一個進程空間中的多個Instance共享這些數據

  刪去了一些無用的#if define,因為我只關心MD5,這個推薦的C實現同時實現了MD2 MD3和 MD4,而且有些#if define還和C不同編譯器有關

  將一些計算宏轉換成final static 成員函數。

  所有的變量命名與原來C實現中保持一致,在大小寫上作一些符合Java習慣的變化,計算過程中的C函數變成了private方法(成員函數)。

  要害變量的位長調整

  定義了類和方法

  需要注重的是,很多早期的C編譯器的int類型是16 bit的,MD5使用了unsigned long int,并認為它是32bit的無符號整數。而在Java中int是32 bit的,long是64 bit的。在MD5的C實現中,使用了大量的位操作。這里需要指出的一點是,盡管Java提供了位操作,由于Java沒有unsigned類型,對于右移位操作多提供了一個無符號右移:>>>,等價于C中的 >> 對于unsigned 數的處理。

  因為Java不提供無符號數的運算,兩個大int數相加就會溢出得到一個負數或異常,因此我將一些要害變量在Java中改成了long類型(64bit)。我個人認為這比自己去重新定義一組無符號數的類同時重載那些運算符要方便,同時效率高很多并且代碼也易讀,OO(Object Oriented)的濫用反而會導致效率低下。

  限于篇幅,這里不再給出原始的C代碼,有愛好對照的讀者朋友可以去看RFC 1321。MD5.java源代碼

  測試

  在RFC 1321中,給出了Test suite用來檢驗你的實現是否正確:



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
69久久夜色精品国产69乱青草| 日韩中文在线不卡| 97免费视频在线播放| 亚洲欧洲在线播放| 美女扒开尿口让男人操亚洲视频网站| 亚洲影院在线看| 久久久久久久999| 2024亚洲男人天堂| 久久这里有精品视频| 欧美第一黄网免费网站| 国产精品美女呻吟| 伊人久久久久久久久久| 欧美一级片久久久久久久| 日韩女优人人人人射在线视频| 久久琪琪电影院| 亚洲欧洲国产精品| 精品日韩美女的视频高清| 高清在线视频日韩欧美| 亚洲国产第一页| 日韩精品在线免费观看视频| 日本亚洲欧美三级| 久久久久久国产精品美女| 国产亚洲视频在线观看| 日韩av网站在线| 久久这里有精品| 91亚洲精品久久久| 亚洲女同精品视频| 亚洲精品电影在线观看| 国产日本欧美在线观看| 欧美激情伊人电影| 久久久久久国产三级电影| 国产亚洲视频中文字幕视频| 国产精品三级网站| 精品久久久久久久久久久久久| 色综合色综合网色综合| 亚洲国产欧美在线成人app| 亚洲最大的成人网| 日韩在线视频观看| 亚洲人成自拍网站| 亚洲第一视频在线观看| 国产精品18久久久久久麻辣| 国产91精品高潮白浆喷水| 国产一区二区在线免费视频| 亚洲免费电影在线观看| 日韩国产欧美精品在线| 欧美大片免费观看| 欧美色播在线播放| 欧美综合激情网| 国产精品老女人视频| 亚洲精品www久久久| 黄色91在线观看| 国产精品精品久久久久久| 久久精品电影网| 亚洲第一av在线| 国产精品美女视频网站| 欧美精品九九久久| 97超级碰碰人国产在线观看| 亚洲欧美另类中文字幕| 中文字幕国产精品| 午夜精品久久久久久久久久久久久| 久久视频中文字幕| 亚洲欧美日韩国产中文| 午夜精品蜜臀一区二区三区免费| 国产成人精品视频在线| 亚洲aaaaaa| 中文字幕亚洲综合久久筱田步美| 日韩精品在线观看视频| 久久天天躁日日躁| 国产精品偷伦一区二区| 欧美另类在线观看| 日本精品视频在线观看| 国产精自产拍久久久久久| 欧美三级xxx| 68精品久久久久久欧美| 中文日韩在线视频| 日韩高清av在线| 91亚洲精品久久久久久久久久久久| 国产美女精品视频| 国产精品香蕉av| 另类色图亚洲色图| 日本道色综合久久影院| 亚洲精品视频在线播放| 欧美影院久久久| 欧美视频不卡中文| 亚洲缚视频在线观看| 国产精品视频自在线| 欧美激情在线狂野欧美精品| 欧美高清自拍一区| 亚洲欧美在线磁力| 亚洲男子天堂网| 性欧美xxxx视频在线观看| 国产精品极品在线| 久久免费视频网站| 亚洲va欧美va国产综合剧情| 亚洲欧美激情视频| 亚洲偷熟乱区亚洲香蕉av| 萌白酱国产一区二区| 色悠悠国产精品| 亚洲va欧美va国产综合剧情| 欧美日韩在线影院| 亚洲精品91美女久久久久久久| 国产伦精品一区二区三区精品视频| 国产这里只有精品| 在线国产精品视频| 国产国产精品人在线视| 亚洲成人动漫在线播放| 欧美极品在线播放| 亚洲香蕉成视频在线观看| 欧美精品在线免费播放| 亚洲jizzjizz日本少妇| 国产精品一区二区久久精品| 精品毛片三在线观看| 欧美国产视频日韩| 国产亚洲精品va在线观看| 91精品国产91久久久久福利| 欧美在线激情网| 日韩美女免费观看| 国产精品美乳在线观看| 国产91色在线播放| 91日本视频在线| 亚洲精品99久久久久| 色与欲影视天天看综合网| 亚洲国产毛片完整版| 久久久久日韩精品久久久男男| 欧美日在线观看| 欧美—级高清免费播放| 欧美激情国产精品| 亚洲专区中文字幕| 日韩美女免费线视频| 日韩一级裸体免费视频| 日韩欧美中文字幕在线播放| 一本色道久久88综合亚洲精品ⅰ| 亚洲第一精品电影| 日韩精品丝袜在线| 91亚洲精华国产精华| 伊人久久男人天堂| 国产精品网红福利| 国模视频一区二区三区| 亚洲午夜久久久久久久| 日本久久久久久久久久久| 92福利视频午夜1000合集在线观看| 亚洲wwwav| 亚洲天堂日韩电影| 成人国产精品免费视频| 午夜精品久久久久久久白皮肤| 日本人成精品视频在线| 亚洲一级片在线看| 亚洲成人激情在线观看| 中文字幕亚洲字幕| 欧美孕妇性xx| 97av在线视频| 亚洲老头同性xxxxx| 91av免费观看91av精品在线| 亚洲高清av在线| 成人在线播放av| 亚洲伊人第一页| 日韩av最新在线| 成人写真视频福利网| 在线性视频日韩欧美| 欧美激情视频三区| 国产亚洲一区精品| 国外成人在线视频| 91精品国产91| 日韩专区在线观看|