中南民族大學(xué)信息安全實驗報告(終).doc_第1頁
中南民族大學(xué)信息安全實驗報告(終).doc_第2頁
中南民族大學(xué)信息安全實驗報告(終).doc_第3頁
中南民族大學(xué)信息安全實驗報告(終).doc_第4頁
中南民族大學(xué)信息安全實驗報告(終).doc_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

院 系: 計算機科學(xué)學(xué)院 專 業(yè):信息與計算科學(xué) 年 級: 11級 課程名稱: 信息安全 班 級 : 信息3班 姓 名 : 胡志橋 學(xué) 號 : 11151196 指導(dǎo)教師: 孟博 2013年 月 日年級11級班號信息3班學(xué)號11151196專業(yè)信息與計算科學(xué)姓名胡志橋?qū)嶒灻Qengima密碼算法實驗類型設(shè)計型綜合型創(chuàng)新型實驗?zāi)康幕蛞笸ㄟ^使用engima密碼模擬器,加深對古典密碼體制的了解,為深入學(xué)習(xí)現(xiàn)代密碼學(xué)奠定基礎(chǔ)。實驗原理(算法流程)enigma看起來是一個裝滿了復(fù)雜而精致的元件的盒子。不過要是我們把它打開來,就可以看到它可以被分解成相當(dāng)簡單的幾部分。下面的圖是它的最基本部分的示意圖,我們可以看見它的三個部分:鍵盤、轉(zhuǎn)子和顯示器。 在上面enigma的照片上,我們看見水平面板的下面部分就是鍵盤,一共有26個鍵,鍵盤排列接近我們現(xiàn)在使用的計算機鍵盤。為了使消息盡量地短和更難以破譯,空格和標(biāo)點符號都被省略。在示意圖中我們只畫了六個鍵。實物照片中,鍵盤上方就是顯示器,它由標(biāo)示了同樣字母的26個小燈組成,當(dāng)鍵盤上的某個鍵被按下時,和此字母被加密后的密文相對應(yīng)的小燈就在顯示器上亮起來。同樣地,在示意圖上我們只畫了六個小燈。在顯示器的上方是三個轉(zhuǎn)子,它們的主要部分隱藏在面板之下,在示意圖中我們暫時只畫了一個轉(zhuǎn)子。鍵盤、轉(zhuǎn)子和顯示器由電線相連,轉(zhuǎn)子本身也集成了6條線路(在實物中是26條),把鍵盤的信號對應(yīng)到顯示器不同的小燈上去。在示意圖中我們可以看到,如果按下a鍵,那么燈b就會亮,這意味著a被加密成了b。同樣地我們看到,b被加密成了a,c被加密成了d,d被加密成了f,e被加密成了e,f被加密成了c。于是如果我們在鍵盤上依次鍵入cafe(咖啡),顯示器上就會依次顯示dbce。這是最簡單的加密方法之一,把每一個字母都按一一對應(yīng)的方法替換為另一個字母,這樣的加密方式叫做“簡單替換密碼”。簡單替換密碼在歷史上很早就出現(xiàn)了。著名的“凱撒法”就是一種簡單替換法,它把每個字母和它在字母表中后若干個位置中的那個字母相對應(yīng)。比如說我們?nèi)『笕齻€位置,那么字母的一一對應(yīng)就如下表所示:明碼字母表:abcdefghijklmnopqrstuvwxyz密碼字母表:defghijklmnopqrstuvwxyzabc于是我們就可以從明文得到密文:(veni, vidi, vici,“我來,我見,我征服”是儒勒凱撒征服本都王法那西斯后向羅馬元老院宣告的名 言)明文:veni, vidi, vici密文:yhal, ylgl, ylfl很明顯,這種簡單的方法只有26種可能性,不足以實際應(yīng)用。一般上是規(guī)定一個比較隨意的一一對應(yīng),比如明碼字母表:abcdefghijklmnopqrstuvwxyz密碼字母表:jqklzndowecpahrbsmyitugvxf甚至可以自己定義一個密碼字母圖形而不采用拉丁字母。但是用這種方法所得到的密文還是相當(dāng)容易被破解的。至遲在公元九世紀(jì),阿拉伯的密碼破譯專家就已經(jīng)嫻熟地掌握了用統(tǒng)計字母出現(xiàn)頻率的方法來擊破簡單替換密碼。破解的原理很簡單:在每種拼音文字語言中,每個字母出現(xiàn)的頻率并不相同,比如說在英語中,e出現(xiàn)的次數(shù)就要大大高于其他字母。所以如果取得了足夠多的密文,通過統(tǒng)計每個字母出現(xiàn)的頻率,我們就可以猜出密碼中的一個字母對應(yīng)于明碼中哪個字母(當(dāng)然還要通過揣摩上下文等基本密碼破譯手段)??履系罓栐谒母柲λ固桨讣刑璧娜死镌敿?xì)敘述了福爾摩斯使用頻率統(tǒng)計法破譯跳舞人形密碼的過程。所以如果轉(zhuǎn)子的作用僅僅是把一個字母換成另一個字母,那就沒有太大的意思了。但是大家可能已經(jīng)猜出來了,所謂的“轉(zhuǎn)子”,它會轉(zhuǎn)動!這就是謝爾比烏斯關(guān)于enigma的最重要的設(shè)計當(dāng)鍵盤上一個鍵被按下時,相應(yīng)的密文在顯示器上顯示,然后轉(zhuǎn)子的方向就自動地轉(zhuǎn)動一個字母的位置(在示意圖中就是轉(zhuǎn)動1/6圈,而在實際中轉(zhuǎn)動1/26圈)。下面的示意圖表示了連續(xù)鍵入3個b的情況: 當(dāng)?shù)谝淮捂I入b時,信號通過轉(zhuǎn)子中的連線,燈a亮起來,放開鍵后,轉(zhuǎn)子轉(zhuǎn)動一格,各字母所對應(yīng)的密碼就改變了;第二次鍵入b時,它所對應(yīng)的字母就變成了c;同樣地,第三次鍵入b時,燈e閃亮。這不是一種簡單替換密碼。同一個字母b在明文的不同位置時,可以被不同的字母替換,而密文中不同位置的同一個字母,可以代表明文中的不同字母,頻率分析法在這里就沒有用武之地了。這種加密方式被稱為“復(fù)式替換密碼”。但是我們看到,如果連續(xù)鍵入6個字母(實物中26個字母),轉(zhuǎn)子就會整整轉(zhuǎn)一圈,回到原始的方向上,這時編碼就和最初重復(fù)了。而在加密過程中,重復(fù)的現(xiàn)象是很危險的,這可以使試圖破譯密碼的人看見規(guī)律性的東西。于是謝爾比烏斯在機器上又加了一個轉(zhuǎn)子。當(dāng)?shù)谝粋€轉(zhuǎn)子轉(zhuǎn)動整整一圈以后,它上面有一個齒撥動第二個轉(zhuǎn)子,使得它的方向轉(zhuǎn)動一個字母的位置??聪旅娴氖疽鈭D(為了簡單起見,現(xiàn)在我們將它表示為平面形式): 這里(a)圖中我們假設(shè)第一個轉(zhuǎn)子(左邊的那個)已經(jīng)整整轉(zhuǎn)了一圈,按b鍵時顯示器上d燈亮;當(dāng)放開b鍵時第一個轉(zhuǎn)子上的齒也帶動第二個轉(zhuǎn)子同時轉(zhuǎn)動一格,于是(b)圖中第二次鍵入b時,加密的字母為f;而再次放開鍵b時,就只有第一個轉(zhuǎn)子轉(zhuǎn)動了,于是(c)圖中第三次鍵入b時,與b相對應(yīng)的就是字母b。(寫不完時,可另加附頁。)組內(nèi)分工(可選)實驗結(jié)果分析及心得體會加密成績評定教師簽名: 年 月 日備注:源代碼附后,源代碼要求有注釋說明年級11級班號信息3班學(xué)號11151196專業(yè)信息與計算科學(xué)姓名胡志橋?qū)嶒灻Q基于rsa的數(shù)字簽名實現(xiàn)實驗類型設(shè)計型綜合型創(chuàng)新型實驗?zāi)康幕蛞?掌握rsa算法的基本原理,通過用rsa算法對實際數(shù)據(jù)進(jìn)行加密和解密來深刻了解rsa的運行原理。對數(shù)字簽名有所了解,理解和掌握md5算法,以及如何利用rsa和md5算法來實現(xiàn)數(shù)字簽名。實驗原理(算法流程) 公鑰密碼體制中,解密和加密密鑰不同,解密和加密可分離,通信雙方無須事先交換密鑰就可建立起保密通信,較好地解決了傳統(tǒng)密碼體制在網(wǎng)絡(luò)通信中出現(xiàn)的問題.另外,隨著電子商務(wù)的發(fā)展,網(wǎng)絡(luò)上資金的電子交換日益頻繁,如何防止信息的偽造和欺騙也成為非常重要的問題.數(shù)字簽名可以起到身份認(rèn)證,核準(zhǔn)數(shù)據(jù)完整性的作用.目前關(guān)于數(shù)字簽名的研究主要集中基于公鑰密碼體制的數(shù)字簽名.公鑰密碼體制的特點是:為每個用戶產(chǎn)生一對密鑰(pk和sk);pk公開,sk保密;從pk推出sk是很困難的;a,b雙方通信時,a通過任何途徑取得b的公鑰,用b的公鑰加密信息.加密后的信息可通過任何不安全信道發(fā)送.b收到密文信息后,用自己私鑰解密恢復(fù)出明文.rsa公鑰密碼體制到目前為止還是一種認(rèn)可為安全的體制. rsa算法和用rsa算法實現(xiàn)數(shù)字簽名的理論,以及它們在實際應(yīng)用中的實現(xiàn).1、rsa算法rsa算法是一種非對稱密碼算法,所謂非對稱,就是指該算法需要一對密鑰,使用其中一個加密,則需要用另一個才能解密。 rsa的算法涉及三個參數(shù),n、e1、e2。 其中,n是兩個大質(zhì)數(shù)p、q的積,n的二進(jìn)制表示時所占用的位數(shù),就是所謂的密鑰長度。 e1和e2是一對相關(guān)的值,e1可以任意取,但要求e1與(p-1)*(q-1)互質(zhì);再選擇e2,要求(e2*e1)mod(p-1)*(q-1)=1。 (n及e1),(n及e2)就是密鑰對。 rsa加解密的算法完全相同,設(shè)a為明文,b為密文,則:a=be1 mod n;b=ae2 mod n; e1和e2可以互換使用,即: a=be2 mod n;b=ae1 mod n;2、 rsa數(shù)字簽名算法的理論描述rsa數(shù)字簽名算法的過程為:a對明文m用解密變換作: s dk (m)=md mod n,其中d,n為a的私人密鑰,只有a才知道它;b收到a的簽名后,用a的公鑰和加密變換得到明文,因: ek(s)= ek(dk (m)= (md)e mod n,又 de1 mod (n)即de=l(n)+1,根據(jù)歐拉定理m(n)=1 mod n,所以ek(s)=ml(n)+1=m(n)em=m mod n.若明文m和簽名s一起送給用戶b,b可以確信信息確實是a發(fā)送的.同時a也不能否認(rèn)送給這個信息,因為除了a本人外,其他任何人都無法由明文m產(chǎn)生s.因此rsa數(shù)字簽名方案是可行的. 但是rsa數(shù)字簽名算法存在著因計算方法本身同構(gòu)造成簽名易被偽造和計算時間長的弱點,因此實際對文件簽名前,需要對消息做md5變換.md5函數(shù)是一種單向散列函數(shù),它將任意長度的消息壓縮成128位的消息摘要.應(yīng)用md5的單向性(即給定散列值,計算消息很難)和抗碰撞性(即給定消息m,要找到另一消息m 并滿足兩者的散列值很難),可以實現(xiàn)信息的完整性檢驗.另外該函數(shù)的設(shè)計不基于任何假設(shè)和密碼體制而直接構(gòu)造,執(zhí)行的速度快,是一種被廣泛認(rèn)可的單向散列算法.3、md5算法的實現(xiàn)算法描述:對md5算法簡要的敘述可以為:md5以512位分組來處理輸入的信息,且每一分組又被劃分為16個32位子分組,經(jīng)過了一系列的處理后,算法的輸出由四個32位分組組成,將這四個32位分組級聯(lián)后將生成一個128位散列值。在md5算法中,首先需要對信息進(jìn)行填充,使其字節(jié)長度對512求余的結(jié)果等于448。因此,信息的字節(jié)長度(bits length)將被擴展至n*512+448,即n*64+56個字節(jié)(bytes),n為一個正整數(shù)。填充的方法如下,在信息的后面填充一個1和無數(shù)個0,直到滿足上面的條件時才停止用0對信息的填充。然后,在在這個結(jié)果后面附加一個以64位二進(jìn)制表示的填充前信息長度。經(jīng)過這兩步的處理,現(xiàn)在的信息字節(jié)長度=n*512+448+64=(n+1)*512,即長度恰好是512的整數(shù)倍。這樣做的原因是為滿足后面處理中對信息長度的要求。md5中有四個32位被稱作鏈接變量(chaining variable)的整數(shù)參數(shù),他們分別為:a=0x01234567,b=0x89abcdef,c=0xfedcba98,d=0x76543210。當(dāng)設(shè)置好這四個鏈接變量后,就開始進(jìn)入算法的四輪循環(huán)運算。循環(huán)的次數(shù)是信息中512位信息分組的數(shù)目。將上面四個鏈接變量復(fù)制到另外四個變量中:a到a,b到b,c到c,d到d。主循環(huán)有四輪(md4只有三輪),每輪循環(huán)都很相似。第一輪進(jìn)行16次操作。每次操作對a、b、c和d中的其中三個作一次非線性函數(shù)運算,然后將所得結(jié)果加上第四個變量,文本的一個子分組和一個常數(shù)。再將所得結(jié)果向右環(huán)移一個不定的數(shù),并加上a、b、c或d中之一。最后用該結(jié)果取代a、b、c或d中之一。md5的安全性md5相對md4所作的改進(jìn):1. 增加了第四輪;2. 每一步均有唯一的加法常數(shù);3. 為減弱第二輪中函數(shù)g的對稱性從(x&y)|(x&z)|(y&z)變?yōu)?x&z)|(y&(z);4. 第一步加上了上一步的結(jié)果,這將引起更快的雪崩效應(yīng);5. 改變了第二輪和第三輪中訪問消息子分組的次序,使其更不相似;6. 近似優(yōu)化了每一輪中的循環(huán)左移位移量以實現(xiàn)更快的雪崩效應(yīng)。各輪的位移量互不相同。組內(nèi)分工(可選)實驗結(jié)果分析rsa加密解密md5加密成績評定教師簽名: 年 月 日備注:源代碼附后,源代碼要求有注釋說明/rsa加密解密package chp16;import java.security.*;import erfaces.*;import java.math.*;import java.io.*;public class password_test /用fileinputstream獲取公鑰/用rsapublickey類中的方法獲取公鑰的參數(shù)(e,n) /用“biginteger m = new biginteger(ptext);”來獲得明文整數(shù)/執(zhí)行計算public static void main(string args) try new password_test();encryption_rsa(); catch (exception e) e.printstacktrace();public password_test() throws exception / 構(gòu)造方法 創(chuàng)建公鑰和私鑰keypairgenerator kpg = keypairgenerator.getinstance(rsa);/生成實現(xiàn)rsa算法的keypairgenerator對象。kpg.initialize(1024);/ 初始化確定密鑰的大小keypair kp = kpg.genkeypair();/ 生成密鑰對publickey pbkey = kp.getpublic();/ 創(chuàng)建公鑰privatekey prkey = kp.getprivate();/ 創(chuàng)建私鑰/ 保存公鑰fileoutputstream file1 = new fileoutputstream(skey_rsa_pub.dat);objectoutputstream ob1 = new objectoutputstream(file1);/創(chuàng)建objectoutputstream對象ob1.writeobject(pbkey); /將指定的對象寫入 objectoutputstream。/ 保存私鑰fileoutputstream file2 = new fileoutputstream(skey_rsa_priv.dat);objectoutputstream ob2 = new objectoutputstream(file2);ob2.writeobject(prkey);public static void encryption_rsa() throws exception system.out.println(根據(jù)公鑰生成密文:+n);string string = i am a student;/ 獲取公鑰及參數(shù)e,nfileinputstream f_in = new fileinputstream(skey_rsa_pub.dat);objectinputstream o_in = new objectinputstream(f_in);rsapublickey pbk = (rsapublickey) o_in.readobject();biginteger e = pbk.getpublicexponent();/返回此公鑰的指數(shù)biginteger n = pbk.getmodulus();/返回此公鑰的模system.out.println(公鑰的指數(shù) e= + e);system.out.println(公鑰的模 n= + n);/ 明文 bitbyte bt = string.getbytes(utf8);biginteger bit = new biginteger(bt);/ 計算密文c,打印biginteger mi = bit.modpow(e, n);/生成密文system.out.println(生成密文為: + mi+nn);/打印密文/ 保存密文string save = mi.tostring();bufferedwriter out = new bufferedwriter(new outputstreamwriter(new fileoutputstream(enc_rsa.dat);out.write(save, 0, save.length();out.close();decrypt_rsa();public static void decrypt_rsa() throws exception system.out.println(根據(jù)私鑰破解密文:+n);/ 讀取密文bufferedreader in = new bufferedreader(new inputstreamreader(new fileinputstream(enc_rsa.dat);string ctext = in.readline();biginteger mi = new biginteger(ctext);/ 讀取私鑰fileinputstream f = new fileinputstream(skey_rsa_priv.dat);objectinputstream b = new objectinputstream(f);rsaprivatekey prk = (rsaprivatekey) b.readobject();biginteger d = prk.getprivateexponent();/返回此私鑰的指數(shù)biginteger n = prk.getmodulus();/返回此私鑰的模system.out.println(私鑰的指數(shù) d= + d);system.out.println(私鑰的模 n= + n);biginteger jie = mi.modpow(d, n);/進(jìn)行解密操作system.out.println(m= + jie);/ 顯示解密結(jié)果byte mt = jie.tobytearray();system.out.println(解密后的文本內(nèi)容為: );for (int i = 0; i mt.length; i+) system.out.print(char) mti);md5加密package md5;import java.lang.reflect.*;/* * md5 算法的java bean md5 類實現(xiàn)了rsa data security, inc.在提交給ietf 的rfc1321中的md5 * message-digest 算法。 */public class md5 / 下面這些s11-s44實際上是一個4*4的矩陣,在原始的c實現(xiàn)中是用#define 實現(xiàn)的,這里把它們實現(xiàn)成為static/ final是表示了只讀,切能在同一個進(jìn)程空間內(nèi)的多個instance間共享static final int s11 = 7;static final int s12 = 12;static final int s13 = 17;static final int s14 = 22;static final int s21 = 5;static final int s22 = 9;static final int s23 = 14;static final int s24 = 20;static final int s31 = 4;static final int s32 = 11;static final int s33 = 16;static final int s34 = 23;static final int s41 = 6;static final int s42 = 10;static final int s43 = 15;static final int s44 = 21;static final byte padding = -128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0, 0, 0, 0, 0 ;/ 下面的三個成員是md5計算過程中用到的3個核心數(shù)據(jù),在原始的c實現(xiàn)中被定義到md5_ctx結(jié)構(gòu)中private long state = new long4; / state (abcd)private long count = new long2; / number of bits, modulo 264 (lsb/ first)private byte buffer = new byte64; / input buffer/ digesthexstr是md5的唯一一個公共成員,是最新一次計算結(jié)果的16進(jìn)制ascii表示.public string digesthexstr;/ digest,是最新一次計算結(jié)果的2進(jìn)制內(nèi)部表示,表示128bit的md5值.private byte digest = new byte16;/ getmd5ofstr是類md5最主要的公共方法,入口參數(shù)是你想要進(jìn)行md5變換的字符串返回的是變換完的結(jié)果,這個結(jié)果是從公共成員digesthexstr取得的public string getmd5ofstr(string inbuf) md5init();md5update(inbuf.getbytes(), inbuf.length();md5final();digesthexstr = ;for (int i = 0; i 16; i+) digesthexstr += bytehex(digesti);return digesthexstr;/ 這是md5這個類的標(biāo)準(zhǔn)構(gòu)造函數(shù),javabean要求有一個public的并且沒有參數(shù)的構(gòu)造函數(shù)public md5() md5init();return;/ md5init是一個初始化函數(shù),初始化核心變量,裝入標(biāo)準(zhǔn)的幻數(shù)private void md5init() count0 = 0l;count1 = 0l;/ load magic initialization constants.state0 = 0x67452301l;state1 = 0xefcdab89l;state2 = 0x98badcfel;state3 = 0x10325476l;return;/* * f, g, h ,i是4個基本的md5函數(shù),在原始的md5的c實現(xiàn)中,由于它們是簡單的位運算,可能出于效率的考慮把它們實現(xiàn)成了宏,在java中, * 我們把它們實現(xiàn)成了private方法,名字保持了原來c中的。 */private long f(long x, long y, long z) return (x & y) | (x) & z);private long g(long x, long y, long z) return (x & z) | (y & (z);private long h(long x, long y, long z) return x y z;private long i(long x, long y, long z) return y (x | (z);/* * ff,gg,hh和ii將調(diào)用f,g,h,i進(jìn)行近一步變換ff, gg, hh, and ii transformations for rounds * 1, 2, 3, and 4. rotation is separate from addition to prevent * recomputation. */private long ff(long a, long b, long c, long d, long x, long s, long ac) a += f(b, c, d) + x + ac;a = (int) a (32 - s);a += b;return a;private long gg(long a, long b, long c, long d, long x, long s, long ac) a += g(b, c, d) + x + ac;a = (int) a (32 - s);a += b;return a;private long hh(long a, long b, long c, long d, long x, long s, long ac) a += h(b, c, d) + x + ac;a = (int) a (32 - s);a += b;return a;private long ii(long a, long b, long c, long d, long x, long s, long ac) a += i(b, c, d) + x + ac;a = (int) a (32 - s);a += b;return a;/ md5update是md5的主計算過程,inbuf是要變換的字節(jié)串,inputlen是長度,這個函數(shù)由getmd5ofstr調(diào)用,調(diào)用之前需要調(diào)用md5init,因此把它設(shè)計成private的private void md5update(byte inbuf, int inputlen) int i, index, partlen;byte block = new byte64;index = (int) (count0 3) & 0x3f;/ update number of bitsif (count0 += (inputlen 3) (inputlen 29);partlen = 64 - index;/ transform as many times as possible.if (inputlen = partlen) md5memcpy(buffer, inbuf, index, 0, partlen);md5transform(buffer);for (i = partlen; i + 63 3) & 0x3f;padlen = (index 56) ? (56 - index) : (120 - index);md5update(padding, padlen);/ append length (before padding)md5update(bits, 8);/ store state in digestencode(digest, state, 16);/ md5memcpy是一個內(nèi)部使用的byte數(shù)組的塊拷貝函數(shù),從input的inpos開始把len長度的字節(jié)拷貝到output的outpos位置開始private void md5memcpy(byte output, byte input, int outpos, int inpos,int len) int i;for (i = 0; i len; i+) outputoutpos + i = inputinpos + i;/ md5transform是md5核心變換程序,有md5update調(diào)用,block是分塊的原始字節(jié)private void md5transform(byte block) long a = state0, b = state1, c = state2, d = state3;long x = new long16;decode(x, block, 64);/* round 1 */a = ff(a, b, c, d, x0, s11, 0xd76aa478l); /* 1 */d = ff(d, a, b, c, x1, s12, 0xe8c7b756l); /* 2 */c = ff(c, d, a, b, x2, s13, 0x242070dbl); /* 3 */b = ff(b, c, d, a, x3, s14, 0xc1bdceeel); /* 4 */a = ff(a, b, c, d, x4, s11, 0xf57c0fafl); /* 5 */d = ff(d, a, b, c, x5, s12, 0x4787c62al); /* 6 */c = ff(c, d, a, b, x6, s13, 0xa8304613l); /* 7 */b = ff(b, c, d, a, x7, s14, 0xfd469501l); /* 8 */a = ff(a, b, c, d, x8, s11, 0x698098d8l); /* 9 */d = ff(d, a, b, c, x9, s12, 0x8b44f7afl); /* 10 */c = ff(c, d, a, b, x10, s13, 0xffff5bb1l); /* 11 */b = ff(b, c, d, a, x11, s14, 0x895cd7bel); /* 12 */a = ff(a, b, c, d, x12, s11, 0x6b901122l); /* 13 */d = ff(d, a, b, c, x13, s12, 0xfd987193l); /* 14 */c = ff(c, d, a, b, x14, s13, 0xa679438el); /* 15 */b = ff(b, c, d, a, x15, s14, 0x49b40821l); /* 16 */* round 2 */a = gg(a, b, c, d, x1, s21, 0xf61e2562l); /* 17 */d = gg(d, a, b, c, x6, s22, 0xc040b340l); /* 18 */c = gg(c, d, a, b, x11, s23, 0x265e5a51l); /* 19 */b = gg(b, c, d, a, x0, s24, 0xe9b6c7aal); /* 20 */a = gg(a, b, c, d, x5, s21, 0xd62f105dl); /* 21 */d = gg(d, a, b, c, x10, s22, 0x2441453l); /* 22 */c = gg(c, d, a, b, x15, s23, 0xd8a1e681l); /* 23 */b = gg(b, c, d, a, x4, s24, 0xe7d3fbc8l); /* 24 */a = gg(a, b, c, d, x9, s21, 0x21e1cde6l); /* 25 */d = gg(d, a, b, c, x14, s22, 0xc33707d6l); /* 26 */c = gg(c, d, a, b, x3, s23, 0xf4d50d87l); /* 27 */b = gg(b, c, d, a, x8, s24, 0x455a14edl); /* 28 */a = gg(a, b, c, d, x13, s21, 0xa9e3e905l); /* 29 */d = gg(d, a, b, c, x2, s22, 0xfcefa3f8l); /* 30 */c = gg(c, d, a, b, x7, s23, 0x676f02d9l); /* 31 */b = gg(b, c, d, a, x12, s24, 0x8d2a4c8al); /* 32 */* round 3 */a = hh(a, b, c, d, x5, s31, 0xfffa3942l); /* 33 */d = hh(d, a, b, c, x8, s32, 0x8771f681l); /* 34 */c = hh(c, d, a, b, x11, s33, 0x6d9d6122l); /* 35 */b = hh(b, c, d, a, x14, s34, 0xfde5380cl); /* 36 */a = hh(a, b, c, d, x1, s31, 0xa4beea44l); /* 37 */d = hh(d, a, b, c, x4, s32, 0x4bdecfa9l); /* 38 */c = hh(c, d, a, b, x7, s33, 0xf6bb4b60l); /* 39 */b = hh(b, c, d, a, x10, s34, 0xbebfbc70l); /* 40 */a = hh(a, b, c, d, x13, s31, 0x289b7ec6l); /* 41 */d = hh(d, a, b, c, x0, s32, 0xeaa127fal); /* 42 */c = hh(c, d, a, b, x3, s33, 0xd4ef3085l); /* 43 */b = hh(b, c, d, a, x6, s34, 0x4881d05l); /* 44 */a = hh(a, b, c, d, x9, s31, 0xd9d4d039l); /* 45 */d = hh(d, a, b, c, x12, s32, 0xe6db99e5l); /* 46 */c = hh(c, d, a, b, x15, s33, 0x1fa27cf8l); /* 47 */b = hh(b, c, d, a, x2, s34, 0xc4ac5665l); /* 48 */* round 4 */a = ii(a, b, c, d, x0, s41, 0xf4292244l); /* 49 */d = ii(d, a, b, c, x7, s42, 0x432aff97l); /* 50 */c = ii(c, d, a, b, x14, s43, 0xab9423a7l); /* 51 */b = ii(b, c, d, a, x5, s44, 0xfc93a039l); /* 52 */a = ii(a, b, c, d, x12, s41, 0x655b59c3l); /* 53 */d = ii(d, a, b, c, x3, s42, 0x8f0ccc92l); /* 54 */c = ii(c, d, a, b, x10, s43, 0xffeff47dl); /* 55 */b = ii(b, c, d, a, x1, s44, 0x85845dd1l); /* 56 */a = ii(a, b, c, d, x8, s41, 0x6fa87e4fl); /* 57 */d = ii(d, a, b, c, x15, s42, 0xfe2ce6e0l); /* 58 */c = ii(c, d, a, b, x6, s43, 0xa3014314l); /* 59 */b = ii(b, c, d, a, x13, s44, 0x4e0811a1l); /* 60 */a = ii(a, b, c, d, x4, s41, 0xf7537e82l); /* 61 */d = ii(d, a, b, c, x11, s42, 0xbd3af235l); /* 62 */c = ii(c, d, a, b, x2, s43, 0x2ad7d2bbl); /* 63 */b = ii(b, c, d, a, x9, s44, 0xeb86d391l); /* 64 */state0 += a;state1 += b;state2 += c

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論