




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
簡介安全散列算法SHA(SecureHashAlgorithm,SHA)是美國國家標準技術研究所發布的國家標準FIPSPUB180,最新的標準已經于2008年更新到FIPSPUB180-3。其中規定了SHA-1,SHA-224,SHA-256,SHA-384,和SHA-512這幾種單向散列算法。SHA-1,SHA-224和SHA-256適用于長度不超過2"64二進制位的消息。SHA-384和SHA-512適用于長度不超過2"128二進制位的消息。散列算法散列是信息的提煉,通常其長度要比信息小得多,且為一個固定長度。加密性強的散列一定是不可逆的,這就意味著通過散列結果,無法推出任何部分的原始信息。任何輸入信息的變化,哪怕僅一位,都將導致散列結果的明顯變化,這稱之為雪崩效應。散列還應該是防沖突的,即找不出具有相同散列結果的兩條信息。具有這些特性的散列結果就可以用于驗證信息是否被修改。單向散列函數一般用于產生消息摘要,密鑰加密等,常見的有:lMD5(MessageDigestAlgorithm5):是RSA數據安全公司開發的一種單向散列算法。lSHA(SecureHashAlgorithm):可以對任意長度的數據運算生成一個160位的數值;SHA-1在1993年,安全散列算法(SHA)由美國國家標準和技術協會(NIST)提出,并作為聯邦信息處理標準(FIPSPUB180)公布;1995年又發布了一個修訂版FIPSPUB180-1,通常稱之為SHA-1。SHA-1是基于MD4算法的,并且它的設計在很大程度上是模仿MD4的。現在已成為公認的最安全的散列算法之一,并被廣泛使用。原理SHA-1是一種數據加密算法,該算法的思想是接收一段明文,然后以一種不可逆的方式將它轉換成一段(通常更小)密文,也可以簡單的理解為取一串輸入碼(稱為預映射或信息),并把它們轉化為長度較短、位數固定的輸出序列即散列值(也稱為信息摘要或信息認證代碼)的過程。單向散列函數的安全性在于其產生散列值的操作過程具有較強的單向性。如果在輸入序列中嵌入密碼,那么任何人在不知道密碼的情況下都不能產生正確的散列值,從而保證了其安全性。SHA將輸入流按照每塊512位(64個字節)進行分塊,并產生20個字節的被稱為信息認證代碼或信息摘要的輸出。該算法輸入報文的長度不限,產生的輸出是一個160位的報文摘要。輸入是按512位的分組進行處理的°SHA-1是不可逆的、防沖突,并具有良好的雪崩效應。通過散列算法可實現數字簽名實現,數字簽名的原理是將要傳送的明文通過一種函數運算(Hash)轉換成報文摘要(不同的明文對應不同的報文摘要),報文摘要加密后與明文一起傳送給接受方,接受方將接受的明文產生新的報文摘要與發送方的發來報文摘要解密比較,比較結果一致表示明文未被改動,如果不一致表示明文已被篡改。MAC(信息認證代碼)就是一個散列結果,其中部分輸入信息是密碼,只有知道這個密碼的參與者才能再次計算和驗證MAC碼的合法性。SHA-1與MD5的比較因為二者均由MD4導出,SHA-1和MD5彼此很相似。相應的,他們的強度和其他特性也是相似,但還有以下幾點不同:l對強行攻擊的安全性:最顯著和最重要的區別是SHA-1摘要比MD5摘要長32位。使用強行技術,產生任何一個報文使其摘要等于給定報摘要的難度對MD5是2"128數量級的操作,而對SHA-1則是2"160數量級的操作。這樣,SHA-1對強行攻擊有更大的強度。l對密碼分析的安全性:由于MD5的設計,易受密碼分析的攻擊,SHA-1顯得不易受這樣的攻擊。l速度:在相同的硬件上,SHA-1的運行速度比MD5慢。2應用計算MD5或sha-1加密哈希值的文件當您將哈希算法應用于任意數量的如一個二進制文件的數據時結果將是一個哈希或消息摘要。此哈希具有固定的大小。MD5是創建一個128位的哈希值的哈希算法。sha-1是創建一個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實現源碼/*安全散列算法SHA(SecureHashAlgorithm,SHA)*/publicclassSHA1((0x67452301,0xefcdab89,0x98badcfe,privatefinalint口abcde=0x10325476,0xc3d2e1f0);(0x67452301,0xefcdab89,0x98badcfe,//摘要數據存儲數組privateint[]digestInt=newint[5];//計算過程中的臨時數據存儲數組privateint[]tmpData=newint[80];//計算sha-1摘要privateintprocess_input_bytes(byte[]bytedata)(//初試化常量System.arraycopy(abcde,0,digestInt,0,abcde.length);//格式化輸入字節數組,補10及長度數據byte[]newbyte=byteArrayFormatData(bytedata);//獲取數據摘要計算的數據單元個數intMCount=newbyte.length/64;//循環對每個數據單元進行摘要計算for(intpos=0;pos<MCount;pos++)(//將每個單元的數據轉換成16個整型數據,并保存到tmpData的前16個數組元素中for(intj=0;j<16;j++)(tmpData[j]=byteArrayToInt(newbyte,(pos*64)+(j*4));}//摘要計算函數encrypt();}return20;}//格式化輸入字節數組格式privatebyte[]byteArrayFormatData(byte[]bytedata)(//補0數量intzeros=0;//補位后總位數intsize=0;//原始數據長度intn=bytedata.length;//模64后的剩余位數intm=n%64;//計算添加0的個數以及添加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;}//補位后生成的新數組內容byte[]newbyte=newbyte[size];//復制數組的前面部分System.arraycopy(bytedata,0,newbyte,0,n);//獲得數組Append數據元素的位置intl=n;//補1操作newbyte[l++]=(byte)0x80;//補0操作for(inti=0;i<zeros;i++)(newbyte[l++]=(byte)0x00;}//計算數據長度,補數據長度位共8字節,長整型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);}//單元摘要計算函數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字節數組轉換為整數privateintbyteArrayToInt(byte[]bytedata,inti)(return((bytedata[i]&0xff)<<24)|((bytedata[i+1]&0xff)<<1)|((bytedata[i+2]&0xff)<<8)|(bytedata[i+3]&0xff);}//整數轉換為4字節數組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;}//將字節轉換為十六進制字符串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;}//將字節數組轉換為十六進制字符串privatestaticStringbyteArrayToHexString(byte[]bytearray)(Stringst
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 九年級歷史下冊 第一單元 殖民地人民的反抗與資本主義制度的擴展 第2課 俄國的改革教學設計設計(pdf) 新人教版
- Unit 2 My schoolbag Part B Let's talk Let's learn大單元整體教學設計表格式-2024-2025學年人教PEP版英語四年級上冊
- 《習作:我有一個想法》教學設計-2024-2025學年統編版語文三年級上冊
- 6 感官總動員 教學設計-2024-2025學年科學一年級上冊蘇教版
- 2024年九年級化學上冊 根據化學式進行計算專題教學設計 (新版)滬教版
- 2024秋九年級語文上冊 第三單元 12湖心亭看雪教學設計 新人教版
- 七年級英語下冊 Module 8 Story time Unit 1 Once upon a time….第2課時教學設計(新版)外研版
- 藍光治療護理及注意事項
- 27 故事二則《扁鵲治病》(教學設計 )-2024-2025學年統編版語文四年級上冊
- 2023六年級數學上冊 三 分數除法 分數除法應用題教學設計 蘇教版
- GB/T 24915-2010合同能源管理技術通則
- 凸透鏡成像規律動畫可拖動最佳版swf
- 6層框架住宅畢業設計結構計算書
- 2016眾泰t600運動版原廠維修手冊與電路圖-使用說明
- Sigma-Delta-ADC講稿教學講解課件
- 《春秋三傳導讀》課件
- 麻醉科進修匯報課件
- ISO-IEC 27002-2022中文版完整詳細
- 【計算機應用基礎試題】上海中僑職業技術大學2022年練習題匯總(附答案解析)
- 艾滋病(AIDS)經典課件
- 義務教育質量監測小學四年級 德育模擬試卷附答案
評論
0/150
提交評論