安全散列算法SHA_第1頁
安全散列算法SHA_第2頁
安全散列算法SHA_第3頁
安全散列算法SHA_第4頁
安全散列算法SHA_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

簡介安全散列算法SHA(SecureHashAlgorithm,SHA)是美國國家標(biāo)準(zhǔn)技術(shù)研究所發(fā)布的國家標(biāo)準(zhǔn)FIPSPUB180,最新的標(biāo)準(zhǔn)已經(jīng)于2008年更新到FIPSPUB180-3。其中規(guī)定了SHA-1,SHA-224,SHA-256,SHA-384,和SHA-512這幾種單向散列算法。SHA-1,SHA-224和SHA-256適用于長度不超過2"64二進制位的消息。SHA-384和SHA-512適用于長度不超過2"128二進制位的消息。散列算法散列是信息的提煉,通常其長度要比信息小得多,且為一個固定長度。加密性強的散列一定是不可逆的,這就意味著通過散列結(jié)果,無法推出任何部分的原始信息。任何輸入信息的變化,哪怕僅一位,都將導(dǎo)致散列結(jié)果的明顯變化,這稱之為雪崩效應(yīng)。散列還應(yīng)該是防沖突的,即找不出具有相同散列結(jié)果的兩條信息。具有這些特性的散列結(jié)果就可以用于驗證信息是否被修改。單向散列函數(shù)一般用于產(chǎn)生消息摘要,密鑰加密等,常見的有:lMD5(MessageDigestAlgorithm5):是RSA數(shù)據(jù)安全公司開發(fā)的一種單向散列算法。lSHA(SecureHashAlgorithm):可以對任意長度的數(shù)據(jù)運算生成一個160位的數(shù)值;SHA-1在1993年,安全散列算法(SHA)由美國國家標(biāo)準(zhǔn)和技術(shù)協(xié)會(NIST)提出,并作為聯(lián)邦信息處理標(biāo)準(zhǔn)(FIPSPUB180)公布;1995年又發(fā)布了一個修訂版FIPSPUB180-1,通常稱之為SHA-1。SHA-1是基于MD4算法的,并且它的設(shè)計在很大程度上是模仿MD4的?,F(xiàn)在已成為公認(rèn)的最安全的散列算法之一,并被廣泛使用。原理SHA-1是一種數(shù)據(jù)加密算法,該算法的思想是接收一段明文,然后以一種不可逆的方式將它轉(zhuǎn)換成一段(通常更?。┟芪?,也可以簡單的理解為取一串輸入碼(稱為預(yù)映射或信息),并把它們轉(zhuǎn)化為長度較短、位數(shù)固定的輸出序列即散列值(也稱為信息摘要或信息認(rèn)證代碼)的過程。單向散列函數(shù)的安全性在于其產(chǎn)生散列值的操作過程具有較強的單向性。如果在輸入序列中嵌入密碼,那么任何人在不知道密碼的情況下都不能產(chǎn)生正確的散列值,從而保證了其安全性。SHA將輸入流按照每塊512位(64個字節(jié))進行分塊,并產(chǎn)生20個字節(jié)的被稱為信息認(rèn)證代碼或信息摘要的輸出。該算法輸入報文的長度不限,產(chǎn)生的輸出是一個160位的報文摘要。輸入是按512位的分組進行處理的°SHA-1是不可逆的、防沖突,并具有良好的雪崩效應(yīng)。通過散列算法可實現(xiàn)數(shù)字簽名實現(xiàn),數(shù)字簽名的原理是將要傳送的明文通過一種函數(shù)運算(Hash)轉(zhuǎn)換成報文摘要(不同的明文對應(yīng)不同的報文摘要),報文摘要加密后與明文一起傳送給接受方,接受方將接受的明文產(chǎn)生新的報文摘要與發(fā)送方的發(fā)來報文摘要解密比較,比較結(jié)果一致表示明文未被改動,如果不一致表示明文已被篡改。MAC(信息認(rèn)證代碼)就是一個散列結(jié)果,其中部分輸入信息是密碼,只有知道這個密碼的參與者才能再次計算和驗證MAC碼的合法性。SHA-1與MD5的比較因為二者均由MD4導(dǎo)出,SHA-1和MD5彼此很相似。相應(yīng)的,他們的強度和其他特性也是相似,但還有以下幾點不同:l對強行攻擊的安全性:最顯著和最重要的區(qū)別是SHA-1摘要比MD5摘要長32位。使用強行技術(shù),產(chǎn)生任何一個報文使其摘要等于給定報摘要的難度對MD5是2"128數(shù)量級的操作,而對SHA-1則是2"160數(shù)量級的操作。這樣,SHA-1對強行攻擊有更大的強度。l對密碼分析的安全性:由于MD5的設(shè)計,易受密碼分析的攻擊,SHA-1顯得不易受這樣的攻擊。l速度:在相同的硬件上,SHA-1的運行速度比MD5慢。2應(yīng)用計算MD5或sha-1加密哈希值的文件當(dāng)您將哈希算法應(yīng)用于任意數(shù)量的如一個二進制文件的數(shù)據(jù)時結(jié)果將是一個哈?;蛳⒄?。此哈希具有固定的大小。MD5是創(chuàng)建一個128位的哈希值的哈希算法。sha-1是創(chuàng)建一個160位哈希值的哈希算法。文件校驗和完整性驗證程序(FCW)實用程序可以用于計算MD5或sha-1加密哈希值的文件。若要計算在MD5和文件的sha-1哈希值,請在命令行鍵入以下命令:FCW-md5-sha1path\filename.ext例如對于計算Shdocvw.dll文件%Systemroot%\System32文件夾中的MD5和sha-1哈希值,鍵入以下命令:FCW-md5-sha1c:\windows\system32\shdocvw.dllSHA-1Java實現(xiàn)源碼/*安全散列算法SHA(SecureHashAlgorithm,SHA)*/publicclassSHA1((0x67452301,0xefcdab89,0x98badcfe,privatefinalint口abcde=0x10325476,0xc3d2e1f0);(0x67452301,0xefcdab89,0x98badcfe,//摘要數(shù)據(jù)存儲數(shù)組privateint[]digestInt=newint[5];//計算過程中的臨時數(shù)據(jù)存儲數(shù)組privateint[]tmpData=newint[80];//計算sha-1摘要privateintprocess_input_bytes(byte[]bytedata)(//初試化常量System.arraycopy(abcde,0,digestInt,0,abcde.length);//格式化輸入字節(jié)數(shù)組,補10及長度數(shù)據(jù)byte[]newbyte=byteArrayFormatData(bytedata);//獲取數(shù)據(jù)摘要計算的數(shù)據(jù)單元個數(shù)intMCount=newbyte.length/64;//循環(huán)對每個數(shù)據(jù)單元進行摘要計算for(intpos=0;pos<MCount;pos++)(//將每個單元的數(shù)據(jù)轉(zhuǎn)換成16個整型數(shù)據(jù),并保存到tmpData的前16個數(shù)組元素中for(intj=0;j<16;j++)(tmpData[j]=byteArrayToInt(newbyte,(pos*64)+(j*4));}//摘要計算函數(shù)encrypt();}return20;}//格式化輸入字節(jié)數(shù)組格式privatebyte[]byteArrayFormatData(byte[]bytedata)(//補0數(shù)量intzeros=0;//補位后總位數(shù)intsize=0;//原始數(shù)據(jù)長度intn=bytedata.length;//模64后的剩余位數(shù)intm=n%64;//計算添加0的個數(shù)以及添加10后的總長度if(m<56)(zeros=55-m;size=n-m+64;}elseif(m==56)(zeros=63;size=n+8+64;}else(zeros=63-m+56;size=(n+64)-m+64;}//補位后生成的新數(shù)組內(nèi)容byte[]newbyte=newbyte[size];//復(fù)制數(shù)組的前面部分System.arraycopy(bytedata,0,newbyte,0,n);//獲得數(shù)組Append數(shù)據(jù)元素的位置intl=n;//補1操作newbyte[l++]=(byte)0x80;//補0操作for(inti=0;i<zeros;i++)(newbyte[l++]=(byte)0x00;}//計算數(shù)據(jù)長度,補數(shù)據(jù)長度位共8字節(jié),長整型longN=(long)n*8;byteh8=(byte)(N&0xFF);byteh7=(byte)((N>>8)&0xFF);byteh6 = (byte) ((N >> 16)& 0xFF);byteh5 = (byte) ((N >> 24)& 0xFF);byteh4 = (byte) ((N >> 32)& 0xFF);byteh3 = (byte) ((N >> 40) & 0xFF);byteh2 = (byte) ((N >> 48)& 0xFF);bytehl=(byte)(N>>56);newbyte[l++]=hl;newbyte[l++]=h2;newbyte[l++]=h3;newbyte[l++]=h4;newbyte[l++]=h5;newbyte[l++]=h6;newbyte[l++]=h7;newbyte[l++]=h8;returnnewbyte;}privateintf1(intx,inty,intz)(return(x&y)|(~x&z);}privateintf2(intx,inty,intz)(returnx"y"z;}privateintf3(intx,inty,intz)(return(x&y)|(x&z)|(y&z);}privateintf4(intx,inty)(return(x<<y)|x>>>(32-y);}//單元摘要計算函數(shù)privatevoidencrypt()(for(inti=16;i<=79;i++)(tmpData[i]=f4(tmpData[i-3]"tmpData[i-8]"tmpData[i-14]"tmpData[i-16],1);}int[]tmpabcde=newint[5];for(inti1=0;i1<tmpabcde.length;i1++)(tmpabcde[i1]=digestInt[i1];}for(intj=0;j<=19;j++)(inttmp=f4(tmpabcde[0],5)+f1(tmpabcde[1],tmpabcde[2],tmpabcde[3])+tmpabcde[4]+tmpData[j]+0x5a827999;tmpabcde[4]=tmpabcde[3];tmpabcde[3]=tmpabcde[2];tmpabcde[2]=f4(tmpabcde[1],30);tmpabcde[1]=tmpabcde[0];tmpabcde[0]=tmp;}for(intk=20;k<=39;k++)(inttmp=f4(tmpabcde[0],5)+f2(tmpabcde[1],tmpabcde[2],tmpabcde[3])+tmpabcde[4]+tmpData[k]+0x6ed9eba1;tmpabcde[4]=tmpabcde[3];tmpabcde[3]=tmpabcde[2];tmpabcde[2]=f4(tmpabcde[1],30);tmpabcde[1]=tmpabcde[0];tmpabcde[0]=tmp;}for(intl=40;l<=59;l++)(inttmp=f4(tmpabcde[0],5)+f3(tmpabcde[1],tmpabcde[2],tmpabcde[3])+tmpabcde[4]+tmpData[l]+0x8f1bbcdc;tmpabcde[4] = tmpabcde[3];tmpabcde[3] = tmpabcde[2];tmpabcde[2] = f4(tmpabcde[1],30);tmpabcde[1] = tmpabcde[0];tmpabcde[0] = tmp;}for(intm=60;m<=79;m++)(inttmp=f4(tmpabcde[0],5)+f2(tmpabcde[1],tmpabcde[2],tmpabcde[3])+tmpabcde[4]+tmpData[m]+0xca62c1d6;tmpabcde[4] = tmpabcde[3];tmpabcde[3] = tmpabcde[2];tmpabcde[2] = f4(tmpabcde[1],30);tmpabcde[1] = tmpabcde[0];tmpabcde[0] = tmp;}for(inti2=0;i2<tmpabcde.length;i2++)(digestInt[i2]=digestInt[i2]+tmpabcde[i2];}for(intn=0;n<tmpData.length;n++)(tmpData[n]=0;}}//4字節(jié)數(shù)組轉(zhuǎn)換為整數(shù)privateintbyteArrayToInt(byte[]bytedata,inti)(return((bytedata[i]&0xff)<<24)|((bytedata[i+1]&0xff)<<1)|((bytedata[i+2]&0xff)<<8)|(bytedata[i+3]&0xff);}//整數(shù)轉(zhuǎn)換為4字節(jié)數(shù)組privatevoidintToByteArray(intintValue,byte[]byteData,inti)(byteData[i]=(byte)(intValue>>>24);byteData[i+1]=(byte)(intValue>>>16);byteData[i+2]=(byte)(intValue>>>8);byteData[i+3]=(byte)intValue;}//將字節(jié)轉(zhuǎn)換為十六進制字符串privatestaticStringbyteToHexString(byteib)(char[]Digit={'0',T','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};char[]ob=newchar[2];ob[0]=Digit[(ib>>>4)&0X0F];ob[1]=Digit[ib&0X0F];Strings=newString(ob);returns;}//將字節(jié)數(shù)組轉(zhuǎn)換為十六進制字符串privatestaticStringbyteArrayToHexString(byte[]bytearray)(Stringst

溫馨提示

  • 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

提交評論