SHA算法的实现Word文档格式.docx

上传人:b****4 文档编号:6518541 上传时间:2023-05-06 格式:DOCX 页数:17 大小:54.15KB
下载 相关 举报
SHA算法的实现Word文档格式.docx_第1页
第1页 / 共17页
SHA算法的实现Word文档格式.docx_第2页
第2页 / 共17页
SHA算法的实现Word文档格式.docx_第3页
第3页 / 共17页
SHA算法的实现Word文档格式.docx_第4页
第4页 / 共17页
SHA算法的实现Word文档格式.docx_第5页
第5页 / 共17页
SHA算法的实现Word文档格式.docx_第6页
第6页 / 共17页
SHA算法的实现Word文档格式.docx_第7页
第7页 / 共17页
SHA算法的实现Word文档格式.docx_第8页
第8页 / 共17页
SHA算法的实现Word文档格式.docx_第9页
第9页 / 共17页
SHA算法的实现Word文档格式.docx_第10页
第10页 / 共17页
SHA算法的实现Word文档格式.docx_第11页
第11页 / 共17页
SHA算法的实现Word文档格式.docx_第12页
第12页 / 共17页
SHA算法的实现Word文档格式.docx_第13页
第13页 / 共17页
SHA算法的实现Word文档格式.docx_第14页
第14页 / 共17页
SHA算法的实现Word文档格式.docx_第15页
第15页 / 共17页
SHA算法的实现Word文档格式.docx_第16页
第16页 / 共17页
SHA算法的实现Word文档格式.docx_第17页
第17页 / 共17页
亲,该文档总共17页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

SHA算法的实现Word文档格式.docx

《SHA算法的实现Word文档格式.docx》由会员分享,可在线阅读,更多相关《SHA算法的实现Word文档格式.docx(17页珍藏版)》请在冰点文库上搜索。

SHA算法的实现Word文档格式.docx

public:

//将一个字符串形式的字转化为vector数组

vector<

int>

hex_into_dec(stringword);

//将vector转化为string字符串形式

stringnum_into_message(vector<

A);

//两个字X和Y的逻辑"

和"

word_AND(vector<

A,vector<

B);

或"

word_OR(vector<

异或"

word_XOR(vector<

补"

word_COMPLEMENT(vector<

//两个字X和Y的摸2^32整数加

word_ADD(vector<

//将字X循环左移s个位置

ROTL(vector<

A,ints);

//SHA-1的填充方案,我们设定msg由ASCII码组成

vector<

>

SHA_1_PAD(stringmsg);

//将SHA-1压成以字为单位

compress(vector<

result);

//定义ft函数,每个ft函数都有B,C,D三个字作为输入,并产生一个字作为输出

Ft(intt,vector<

B,vector<

C,vector<

D);

//定义字常数K

K(intt);

//开始进行SHA-1(安全Hash算法)的加密

SHA_1(stringmsg);

};

stringSHA1:

:

num_into_message(vector<

A)

inti;

stringmsg="

"

for(i=0;

i<

A.size();

i++)

if(A[i]>

=0&

&

A[i]<

=9)

msg+='

0'

+A[i];

elseif(A[i]>

=10&

=15)

A'

+(A[i]-10);

}

returnmsg;

SHA1:

hex_into_dec(stringword)

result(NUM,0);

NUM;

if(word[i]>

='

&

word[i]<

9'

result[i]=word[i]-'

elseif(word[i]>

F'

result[i]=10+word[i]-'

returnresult;

word_AND(vector<

B)

result[i]=A[i]&

B[i];

word_OR(vector<

result[i]=A[i]|B[i];

word_XOR(vector<

result[i]=A[i]^B[i];

word_COMPLEMENT(vector<

result[i]=15-A[i];

word_ADD(vector<

for(i=NUM-1;

i>

=0;

i--)

result[i]=A[i]+B[i];

if(i!

=0)

inttemp=result[i]/16;

result[i-1]+=temp;

result[i]%=16;

ROTL(vector<

A,ints)

result=A;

temp(NUM,0);

inti,j;

s;

for(j=NUM-1;

j>

j--)

if(result[j]/8>

=1)

temp[j]=1;

result[j]<

<

=1;

result[j]%=16;

if(j<

NUM-1)

result[j]+=temp[j+1];

elseif(result[j]/8==0)

temp[j]=0;

result[NUM-1]+=temp[0];

}

SHA_1_PAD(stringmsg)

intlen=msg.length();

intbit_num=len*8;

intnum,lest=bit_num%512;

if(lest!

=0)//看消息长度是否超过512字节,我们需要将它补成512的倍数

num=bit_num/512+1;

else

num=bit_num/512;

//首先我们以8位字节为一组保存到vector里面,512比特为一组,即一组里面有64位元素

result;

result.resize(num);

num;

result[i].resize(64);

for(j=0;

j<

64&

i*64+j<

len;

j++)

result[i][j]=msg[i*64+j];

//下面开始为未够512比特的消息分组进行补长度操作

=0){

intx=num-1,last_len=lest/8;

result[x][last_len]=128;

//先补一个"

1"

for(i=last_len+1;

56;

result[x][i]=0;

intlast_l=lest;

j=63;

while(j>

=56)

result[x][j]=last_l%128;

last_l/=128;

j--;

//将SHA-1压成以字为单位(三维数组有点复杂)

compress(vector<

result)

rr;

rr.resize(result.size());

rr.size();

rr[i].resize(128);

result.size();

result[i].size();

rr[i][2*j]=result[i][j]/16;

rr[i][2*j+1]=result[i][j]%16;

rrr;

rrr.resize(result.size());

rrr.size();

rrr[i].resize(16);

16;

rrr[i][j].resize(8);

rr[i].size();

rrr[i][j/8][j%8]=rr[i][j];

returnrrr;

Ft(intt,vector<

D)

if(t>

t<

=19)

a1=word_AND(B,C);

a2=word_AND(word_COMPLEMENT(B),D);

result=word_OR(a1,a2);

elseif((t>

=20&

=39)||(t>

=60&

=79))

a1=word_XOR(B,C);

result=word_XOR(a1,D);

elseif(t>

=40&

=59)

a2=word_AND(B,D);

a3=word_AND(C,D);

a4=word_OR(a1,a2);

result=word_OR(a4,a3);

K(intt)

result=hex_into_dec("

5A827999"

);

=39)

6ED9EBA1"

8F1BBCDC"

=79)

CA62C1D6"

SHA_1(stringmsg)

h0=hex_into_dec(H0);

h1=hex_into_dec(H1);

h2=hex_into_dec(H2);

h3=hex_into_dec(H3);

h4=hex_into_dec(H4);

result1=SHA_1_PAD(msg);

result2=compress(result1);

intn=result2.size();

n;

W;

W.resize(80);

W[j]=result2[i][j];

for(j=16;

80;

a1=word_XOR(W[j-3],W[j-8]);

a2=word_XOR(a1,W[j-14]);

a3=word_XOR(a2,W[j-16]);

W[j]=ROTL(a3,1);

//将string转化为vector数组

A=hex_into_dec(H0);

B=hex_into_dec(H1);

C=hex_into_dec(H2);

D=hex_into_dec(H3);

E=hex_into_dec(H4);

a1=ROTL(A,5);

a2=Ft(j,B,C,D);

a3=word_ADD(a1,a2);

a4=word_ADD(a3,E);

a5=word_ADD(a4,W[j]);

temp=word_ADD(a5,K(j));

E=D;

D=C;

C=ROTL(B,30);

B=A;

A=temp;

h0=word_ADD(h0,A);

h1=word_ADD(h1,B);

h2=word_ADD(h2,C);

h3=word_ADD(h3,D);

h4=word_ADD(h4,E);

//返回结果(H0||H1||H2||H3||H4)

result.push_back(h0);

result.push_back(h1);

result.push_back(h2);

result.push_back(h3);

result.push_back(h4);

intmain()

SHA1sha1;

//定义SHA1算法类

stringmessage="

cryptographyisthepracticeandstudyoftechniquesforsecurecommunicationinthepresenceofthirdpartiesmoregenerallyitisaboutconstructingandanalyzingprotocolsthatovercometheinfluenceofadversariesandwhicharerelatedtovariousaspectsininformationsecuritysuchasdataconfidentialitydataintegrityauthenticationandnonrepudiationmoderncryptographyintersectsthedisciplinesofmathematicscomputerscienceandelectricalengineeringapplicationsofcryptographyincludeATMcardscomputerpasswordsandelectroniccommerce"

result=sha1.SHA_1(message);

cout<

"

消息为:

<

endl<

message<

endl;

利用填充方案SHA-1-PAD给出对消息的填充,得出SHA-1(x)得:

sha1.num_into_message(result[i]);

return0;

程序运行结果:

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > PPT模板 > 中国风

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2