sha256摘要实现Word下载.docx
- 文档编号:6874462
- 上传时间:2023-05-07
- 格式:DOCX
- 页数:18
- 大小:39.17KB
sha256摘要实现Word下载.docx
《sha256摘要实现Word下载.docx》由会员分享,可在线阅读,更多相关《sha256摘要实现Word下载.docx(18页珍藏版)》请在冰点文库上搜索。
4
文献综述
研究水平与设计能力
20
19
17
15
13
课程设计说明书(论文)撰写质量
学术水平与创新
答辩效果
30
28
25
22
是否同意论文(设计)通过答辩
□同意□不同意
答辩小组成员签名
答辩小组组长签名:
课程设计成绩评定表
成绩汇总
比例
分数
课程设计总分
指导老师评分
50%
答辩小组评分
目录
1.引言1
1.1背景1
1.2目的1
1.3本设计的主要任务1
2.系统设计1
2.1主要软件需求(运行环境)1
2.2系统结构2
2.2.1软件操作流程2
2.2.2功能模块2
3系统功能程序设计2
3.1SHA256构造2
3.2初始化3
3.3计算3
3.4摘要5
3.5SHA256析构6
3.12部分关键外部接口设计6
3.13程序界面预览7
4.测试报告8
1文本测试8
2文件测试8
5.参考资料9
6.结论9
参考文献9
1.引言
1.1背景
SHA(SecureHashAlgorithm,译作安全散列算法)是美国国家安全局(NSA)设计,美国国家标准与技术研究院(NIST)发布的一系列密码散列函数。
正式名称为SHA的家族第一个成员发布于1993年。
此外有四种变体,以提升输出的范围和变更一些细微设计:
SHA-256,就是其中之一。
1.2目的
在网络中传输的信息,有时会遭到各种攻击。
接收者需要有一种机制来验证自己收到的信息来源是否真实,信息是否完整,验证信息在传送或存储过程中未篡改,重放或延迟等。
SHA-256可以对消息进行摘要,生成固定长度的消息摘要,随信息一起发送,可以验证信息的真实完整性。
1.3本设计的主要任务
根据SHA-256算法实现任意长度的文本,任意大小任意格式的文件进行摘要,并生成固定长度的消息摘要。
向用户提供良好的界面,良好的操作性。
2.系统设计
2.1主要软件需求(运行环境)
本软件适用VC语言编写,编译成功后的EXE文件可以在装有windows系统的任何计算机上使用。
输入:
二进制,十六进制,ASCII码等格式的信息,也可以是汉字或英文,或者是文本文档,可以是多个分组;
也可以是各种类型的文件;
输出:
512位固定长度的消息摘要;
注:
对于本软件所涉及到的输入,输入字符均以ASCII码和UNICODE码处理输出字符均是16进制数。
测试平台:
WindowsXP
2.2系统结构
2.2.1软件操作流程
摘要文本:
(1)选择“文本”,程序将自动使“文件”相关的的输入框和按钮无效,避免不当操作。
软件默认选择“文本”。
(2)在文本输入框中输入要加密的文本,文本可以是二进制数,十六进制数,十进制数,英文,符号,汉字等。
系统将输入的文本以ASCII码处理,汉字以UNICODE码处理。
(3)点击“文本加密GO~”按钮,进行摘要。
(4)摘要完成后,系统自动显示输入消息的长度及摘要后的摘要值。
(5)如需继续摘要文本,可在文本框内重新输入信息。
(6)使用完毕,点击“关闭”按钮,关闭软件。
摘要文件:
(1)选择“文件”选项,程序将使“文本”相关的输入框和按钮无效,避免不当操作。
(2)在输入框中输入文件路径或点击“浏览”按钮,弹出系统文件菜单,选择要摘要的文件,系统自动在输入框中显示文件路径。
(3)点击“文件摘要GO~”按钮,进行摘要。
(4)摘要完成后,窗口自动显示摘要值。
(5)如需继续使用,可重新选择文件。
2.2.2功能模块
编号
模块名称
模块标识
1
SHA256构造
Csha256:
:
Sha256_init
2
初始化
Sha256_reset
3
计算
Sha256_calculate
摘要
Sha256_Block
5
SHA256析构
Sha256_uninit
3系统功能程序设计
3.1SHA256构造
这个函数其实就是构建一个SHA256类,调用Csha256:
Sha256_reset函数,返回一个Csha256类的指针
signedlongCsha256:
Sha256_init(Csha256*t)
{
returnSha256_reset(t);
}
3.2初始化
初始化函数,将准备字和数据置零,初始化h0-h7
Sha256_reset(Csha256*t)/*初始化函数*/
{
intx;
t->
reg[0]=0x6a09e667;
reg[1]=0xbb67ae85;
reg[2]=0x3c6ef372;
reg[3]=0xa54ff53a;
reg[4]=0x510e527f;
reg[5]=0x9b05688c;
reg[6]=0x1f83d9ab;
reg[7]=0x5be0cd19;
/*h0-h7初始化*/
for(x=0;
x<
16;
x++){t->
Padding[x]=t->
DwordBuf[x]=0;
}
ByteNumLo=t->
ByteNumHi=t->
DwordBufBytes=0;
return0;
}
3.3计算
这个函数的功能是对输入的数据进行分组和填充处理,调用block函数进行计算,并将最后的摘要结果写入value数组。
对于那些长度达到64字节的数据块,调用block函数进行处理
对于长度不足64字节的数据块,要进行数据填充。
在最后一块数据的最后两个字节要添加数据长度。
Sha256_calculate(Csha256*t,char*dp,signedlongdl)
{
/**
x--数据缓冲区偏移
y--字节偏移值*8
z--已处理的数据
w--64Bytes块数
*/
z=(int)((t->
ByteNumLo&
0x7fffffff)+dl);
x=((t->
ByteNumLo>
>
31)&
0x01)+((z>
0x01);
z=(z&
0x7fffffff)|(x<
<
31);
y=t->
ByteNumHi+(x>
1);
if(y>
0x1fffffff)/*超过这个值的话,当前的系统无法处理*/
{return10;
ByteNumLo=z;
ByteNumHi=y;
for(w=0;
w<
w++)
{t->
Padding[w]=t->
DwordBuf[w];
}/*前16个准备字填充以数据*/
8;
{reg[w]=t->
reg[w];
}/*最初的h0-h7填充*/
x=t->
DwordBufBytes/4;
y=(t->
DwordBufBytes&
3)*8;
w=(int)(((t->
DwordBufBytes+dl)>
6)&
0x03ffffff);
z=0;
64Bytes整数据块循环
while(w>
0){
while(x<
16){
t->
Padding[x]=(t->
Padding[x]&
~(0x000000ff<
(24-y)))|((dp[z]&
0x000000ff)<
(24-y));
y=y+8;
x+=(y>
5);
y&
=0x1f;
z++;
}
Sha256_Block(t->
Padding,reg);
x=y=0;
w--;
}
/**清空数据*/
if((x|y)==0){
for(w=0;
{t->
DwordBuf[w]=t->
Padding[w]=0;
最后一块数据循环
z是已经处理的数据数.dl是要处理的总数据的大小,dl大于z.
w=(int)(dl-z);
t->
DwordBuf[x]=t->
Padding[x]=
(t->
y=y+8;
w--;
/**填数据1后面跟一串0*/
Padding[x]|=0x00000080<
(24-y);
/**检查数据长度有没有超过55字节*/
DwordBufBytes=x*4+(y>
3);
if(t->
DwordBufBytes>
55){
/**添加数据长度*/
Padding[15]=t->
ByteNumLo<
3;
Padding[14]=((t->
29)&
0x3)|(t->
ByteNumHi<
Sha256_Block(t->
3.4摘要
对每一组数据进行处理,使用SHA256的6个逻辑函数。
进行64轮迭代计算。
得到每一组数据的处理结果。
Sha256_Block(int*dp,int*rp)
for(x=16;
64;
x++){
t0=(((dp[x-15]>
7)&
0x1ffffff)|(dp[x-15]<
25))^
(((dp[x-15]>
18)&
0x3fff)|(dp[x-15]<
14))^
((dp[x-15]>
3)&
0x1fffffff);
/*σ0函数*/
t1=(((dp[x-2]>
17)&
0x7fff)|(dp[x-2]<
15))^
(((dp[x-2]>
19)&
0x1fff)|(dp[x-2]<
13))^
((dp[x-2]>
10)&
0x3fffff);
/*σ1函数*/
dp[x]=dp[x-16]+t0+dp[x-7]+t1;
a=rp[0];
b=rp[1];
c=rp[2];
d=rp[3];
e=rp[4];
f=rp[5];
g=rp[6];
h=rp[7];
/**主循环*/
t2=(((a>
2)&
0x3fffffff)|(a<
30))^
(((a>
13)&
0x7ffff)|(a<
19))^
22)&
0x3ff)|(a<
10));
/*∑0函数*/
t0=(a&
b)^(a&
c)^(b&
c);
/*Maj函数*/
t2=t2+t0;
t1=(((e>
0x3ffffff)|(e<
26))^
(((e>
11)&
0x1fffff)|(e<
21))^
25)&
0x7f)|(e<
7));
/*∑1函数*/
t0=(e&
f)^((~e)&
g);
/*Ch函数*/
t1=h+t1+t0+Sha256_k[x]+dp[x];
h=g;
g=f;
f=e;
e=d+t1;
d=c;
c=b;
b=a;
a=t1+t2;
rp[0]+=a;
rp[1]+=b;
rp[2]+=c;
rp[3]+=d;
rp[4]+=e;
rp[5]+=f;
rp[6]+=g;
rp[7]+=h;
3.5SHA256析构
返回一个0值
Sha256_uninit(Csha256*t){return0;
3.12部分关键外部接口设计
如下表:
接口名称
接口类型
接口功能
选择文本摘要
无线按钮
选择文本摘要方式
选择文件摘要
选择文件摘要方式
文本
文本框
输入要摘要的文本
文本摘要
按钮
进行文本摘要
文件路径
输入要摘要的文件的路径
浏览
浏览电脑中的文件路径并选择要摘要的文本
文件摘要
进行文件摘要
文本长度
显示文本长度
摘要值
输出摘要值
清空文本框
清空文本框内容,将文本长度置零
清空摘要
清空摘要内容
退出
退出程序
3.13程序界面预览
程序运行后生成的界面如下:
运行后默认的选择是“文本”摘要,在文本框内输入要摘要的文本。
文本可以是二进制数,十六进制数,十进制数,英文,符号,汉字等。
点击“文本摘要GO~”按钮,生成固定长度的摘要值。
选择“文件”并确定文件路径,文件可以是文本文件,或者其他任何格式的文件。
点击“文件摘要GO~”按钮,生成固定长度的摘要
4.测试报告
1文本测试
(1)数字
1234567890
消息长度:
摘要值:
c775e7b757ede630cd0aa1113bd102661ab38829ca52a6422ab782862f268646
(2)小写字母
a
ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb
(3)大写字母
A
559aead08264d5795d3909718cdd5abd49572e84fe55590eef31a88a08fdffd
(4)大小写字母混合
aBcDeFgHi
5ba4d59ca7520b5f8a6eb48be70f9c6e8d0f3490d859ea86aa0d8fe5578b6
(5)汉字
无敌超人
8(一个汉字2字节)
bb85a565a7957e8ac468bfd91c57a344a508b297158b13fd9527aba6d3688c8
(6)其他字符
!
@#¥%……&
*()(*&
……%¥……&
*()——、‘;
【】】’、。
,》?
?
》?
:
75
2ecdbdeca6b6b15e7da954a7b68994c44e44b88b4f9639835fea3b2b64ad6
2文件测试
(1)文本文件
文件内容:
(2)文本文件
(3)word文档
ad706c96796b7bb53082168be0de685ffb4fbe385cc1b9da28add969d39c17
(4)其他文件
测试了音频文件,.C文件,.h文件,均能得出摘要值。
经过检测:
1,本软件能进行正常的消息摘要,通过对比书上的摘要值,本软件摘要结果没有错误。
2,对于长度不足的分组,可以通过填充来按照格式补满。
3,对于错误的输入,能用弹出窗口的方式加以提示。
4,对于不存在的文件摘要能提示。
5,没有发现导致致命错误的操作方法。
5.参考资料
[1]王晓京应用密码学电子工业出版社2006
[2]吴金平从零开始VisualC++基础培新教程人民邮电出版社2002
[3]温秀梅VisualC++面向对象程序设计教程与实验清华大学出版社2005
[4]谭浩强 C程序设计(第三版)清华大学出版社 2005
[5]黄维通 VisualC++面向对象与可视化程序设计(第二版) 清华大学出版社 2003
[6]XX知道
[7]CSDN技术中心
6.结论
这个SHA-256摘要软件可以对二进制,十六进制,ASCII码等格式的信息,汉字或英文,文本文档,及各种类型的文件进行摘要,得出固定长度的摘要值.
程序的算法代码部分,参照了很多网络上的代码,结合自己的理解,进行了改进和优化.感谢时常在线的张金全老师为我解惑.
界面部分的制作曾经碰到很多问题,感谢XX强大的搜索功能和在XX知道回答问题的各位仁兄.所有问题都在查询网络资源后得到解决了.
在测试过程中,发现相同的字符串,在用文本摘要和写入文本文件再对文件摘要时得到的摘要值是相同的.而放入word文档中,就会得到不同的结果.同时发现,word文档是有一个固定的长度值的.请教老师后得知word文档是有头文件的.
完成了这个SHA-256摘要软件,不仅使我对SHA-256算法有了更深入的了解.还加强了MFC工程建立的熟练程度.受益匪浅!
参考文献
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- sha256 摘要 实现