實驗六、SHA-1算法的實現(xiàn)_第1頁
實驗六、SHA-1算法的實現(xiàn)_第2頁
實驗六、SHA-1算法的實現(xiàn)_第3頁
實驗六、SHA-1算法的實現(xiàn)_第4頁
實驗六、SHA-1算法的實現(xiàn)_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

上機實驗報告(六)實驗課程:應(yīng)用密碼學(xué)實驗時間:2013年11月26日任課教師:劉光軍班級:11級信息與計算科學(xué)專業(yè)1班姓名:劉靜學(xué)號:0202110123一、實驗名稱:SHA-1算法的實現(xiàn)二、實驗?zāi)康?、了解SHA-1算法的基本原理2、掌握SHA-1算法的實現(xiàn)方法三、實驗內(nèi)容1、掌握SHA-1算法的原理及過程2、完成字符串?dāng)?shù)據(jù)的SHA-1運算及算法流程四、報告正文(文檔,數(shù)據(jù),模型,程序,圖形)1、討論學(xué)習(xí)SHA-1算法的基本原理,請給出算法的流程描述并畫出算法的實現(xiàn)流程圖。2、用C或C++設(shè)計實現(xiàn)相應(yīng)的功能模塊,并給出最后的測試結(jié)果。1#ifndef_SHA1_H_#define_SHA1_H_/**//*sha1.h*/#ifndef_SHA_enum_#define_SHA_enum_enum...{shaSuccess=0,shaNull,/**//*Nullpointerparameter*/shaInputTooLong,/**//*inputdatatoolong*/shaStateError/**//*calledInputafterResult*/};#endif#defineSHA1HashSize20typedefstructSHA1Context...{DWORDIntermediate_Hash[SHA1HashSize/4];//MessageDigestDWORDLength_Low;DWORDLength_High;//Messagelengthinbits//MessagelengthinbitsintMessage_Block_Index;//IndexintomessageblockarrayunsignedcharMessage_Block[64];//512-bitmessageblocksintComputed;intCorrupted;//Isthedigestcomputed?//Isthemessagedigestcorrupted?}SHA1Context;//FunctionPrototypesCStringGetSHA1String(CStringsSource);intSHA1Reset(SHA1Context*);intSHA1Input(SHA1Context*,constunsignedchar*,unsignedint);intSHA1Result(SHA1Context*,unsignedcharMessage_Digest[SHA1HashSize]);CStringSha1toBase32(constunsignedchar*);#endif2==================================================================================#include"sha1.h"http://DefinetheSHA1circularleftshiftmacro#defineSHA1CircularShift(bits,word)(((word)<<(bits))|((word)>>(32-(bits))))//LocalFunctionPrototyptes*/voidSHA1PadMessage(SHA1Context*);voidSHA1ProcessMessageBlock(SHA1Context*);intSHA1Reset(SHA1Context*c)...{if(!c)returnshaNull;c->Length_Low=0;c->Length_High=0;c->Message_Block_Index=0;c->Intermediate_Hash[0]=0x67452301;c->Intermediate_Hash[1]=0xEFCDAB89;c->Intermediate_Hash[2]=0x98BADCFE;c->Intermediate_Hash[3]=0x10325476;c->Intermediate_Hash[4]=0xC3D2E1F0;c->Computed=0;c->Corrupted=0;returnshaSuccess;}intSHA1Result(SHA1Context*c,unsignedcharMessage_Digest[SHA1HashSize])...{inti;if(!c||!Message_Digest)returnshaNull;if(c->Corrupted)3returnc->Corrupted;if(!c->Computed)...{SHA1PadMessage(c);for(i=0;i<64;c->Message_Block[++i]=0);c->Length_Low=0;/**//*andclearlength*/c->Length_High=0;c->Computed=1;}for(i=0;i<SHA1HashSize;++i)Message_Digest[i]=c->Intermediate_Hash[i>>2]>>8*(3-(i&0x03));returnshaSuccess;}intSHA1Input(SHA1Context*context,constunsignedchar*message_array,unsignedlength)...{if(!length)returnshaSuccess;if(!context||!message_array)returnshaNull;if(context->Computed)...{context->Corrupted=shaStateError;returnshaStateError;}if(context->Corrupted)returncontext->Corrupted;while(length--&&!context->Corrupted)...{context->Message_Block[context->Message_Block_Index++]=(*message_array&0xFF);context->Length_Low+=8;if(context->Length_Low==0)4...{context->Length_High++;if(context->Length_High==0)...{/**//*Messageistoolong*/context->Corrupted=1;}}if(context->Message_Block_Index==64)SHA1ProcessMessageBlock(context);message_array++;}returnshaSuccess;}voidSHA1ProcessMessageBlock(SHA1Context*context)...{constDWORDK[]=...{0x5A827999,0x6ED9EBA1,0x8F1BBCDC,0xCA62C1D6};intt;DWORDtemp;DWORDW[80];DWORDA,B,C,D,E;/**//**Initializethefirst16wordsinthearrayW*/for(t=0;t<16;t++)...{W[t]=context->Message_Block[t*4]<<24;W[t]|=context->Message_Block[t*4+1]<<16;W[t]|=context->Message_Block[t*4+2]<<8;W[t]|=context->Message_Block[t*4+3];}for(t=16;t<80;t++)W[t]=SHA1CircularShift(1,W[t-3]^W[t-8]^W[t-14]^W[t-16]);A=context->Intermediate_Hash[0];B=context->Intermediate_Hash[1];C=context->Intermediate_Hash[2];5D=context->Intermediate_Hash[3];E=context->Intermediate_Hash[4];for(t=0;t<20;t++)...{temp=SHA1CircularShift(5,A)+((B&C)|((~B)&D))+E+W[t]+K[0];E=D;D=C;C=SHA1CircularShift(30,B);B=A;A=temp;}for(t=20;t<40;t++)...{temp=SHA1CircularShift(5,A)+(B^C^D)+E+W[t]+K[1];E=D;D=C;C=SHA1CircularShift(30,B);B=A;A=temp;}for(t=40;t<60;t++)...{temp=SHA1CircularShift(5,A)+((B&C)|(B&D)|(C&D))+E+W[t]+K[2];E=D;D=C;C=SHA1CircularShift(30,B);B=A;A=temp;}for(t=60;t<80;t++)...{temp=SHA1CircularShift(5,A)+(B^C^D)+E+W[t]+K[3];E=D;D=C;C=SHA1CircularShift(30,B);B=A;A=temp;6}context->Intermediate_Hash[0]+=A;context->Intermediate_Hash[1]+=B;context->Intermediate_Hash[2]+=C;context->Intermediate_Hash[3]+=D;context->Intermediate_Hash[4]+=E;context->Message_Block_Index=0;}voidSHA1PadMessage(SHA1Context*context)...{if(context->Message_Block_Index>55)...{context->Message_Block[context->Message_Block_Index++]=0x80;while(context->Message_Block_Index<64)context->Message_Block[context->Message_Block_Index++]=0;SHA1ProcessMessageBlock(context);while(context->Message_Block_Index<56)context->Message_Block[context->Message_Block_Index++]=0;}else...{context->Message_Block[context->Message_Block_Index++]=0x80;while(context->Message_Block_Index<56)context->Message_Block[context->Message_Block_Index++]=0;}/**//**Storethemessagelengthasthelast8octets*/context->Message_Block[56]=context->Length_High>>24;context->Message_Block[57]=context->Length_High>>16;context->Message_Block[58]=context->Length_High>>8;context->Message_Block[59]=context->Length_High;context->Message_Block[60]=context->Length_Low>>24;context->Message_Block[61]=context->Length_Low>>16;7context->Message_Block[62]=context->Length_Low>>8;context->Message_Block[63]=context->Length_Low;SHA1ProcessMessageBlock(context);}//Convert5Bytesto8BytesBase32void_Sha1toBase32(unsignedchar*out,constunsignedchar*in)...{constchar*Table="ABCDEFGHIJKLMNOPQRSTUVWXYZ234567";out[0]=Table[((in[0]>>3))&0x1F];out[1]=Table[((in[0]<<2)|(in[1]>>6))&0x1F];out[2]=Table[((in[1]>>1))&0x1F];out[3]=Table[((in[1]<<4)|(in[2]>>4))&0x1F];out[4]=Table[((in[2]<<1)|(in[3]>>7))&0x1F];out[5]=Table[((in[3]>>2))&0x1F];out[6]=Table[((in[3]<<3)|(in[4]>>5))&0x1F];)&0x1F];out[7]=Table[((in[4])}//Re

溫馨提示

  • 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)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論