2017年网站建设视频教程大学生创新创业大赛负责人简介
news/
2025/10/9 10:42:15/
文章来源:
2017年网站建设视频教程,大学生创新创业大赛负责人简介,网站的流量有什么用,编程网课平台哪个好实验七 SHA-1
一、实验目的
熟悉SHA-1算法的运行过程#xff0c;能够使用C语言编写实现SHA-1算法程序#xff0c;增
加对摘要函数的理解。
二、实验要求
(1)理解SHA-1轮函数的定义和工作过程。
(2)利用VC语言实现SHA- 1算法。
(3)分析SHA- 1算法运行的性能。
三、实验…实验七 SHA-1
一、实验目的
熟悉SHA-1算法的运行过程能够使用C语言编写实现SHA-1算法程序增
加对摘要函数的理解。
二、实验要求
(1)理解SHA-1轮函数的定义和工作过程。
(2)利用VC语言实现SHA- 1算法。
(3)分析SHA- 1算法运行的性能。
三、实验原理
SHA-1对任意长度明文的分组预处理完后的明文长度是512位的整数倍值得注意的是SHA-1的原始报文长度不能超过2的64次方然后SHA-1生成160位的报文摘要。SHA-1算法简单且紧凑容易在计算机上实现。图6-1所示为SHA-1对单个512位分组的处理过程。 1.实验环境
普通计算机Intel i5 34703.2GHz, 4GB RAMWindows 7 Professional Edition, VS平台。
2.算法实现步骤
1)将消息摘要转换成位字符串
因为在SHA- 1算法中它的输入必须为位所以首先要将其转化为位字符串。以“abc”字符串来说明问题因为a97, b98, c99所以将其转换为位串后为01100001 01100010 01100011
2)对转换后的位字符串进行补位操作
SHA-1算法标准规定必须对消息摘要进行补位操作即将输入的数据进行填充使得数据长度对512求余的结果为448填充比特位的最高位补一个1,其余位补0如果在补位之前已经满足对512取模余数为448则要进行补位在其后补一位1。总之补位是至少补一位最多补512位。依然以“abc”为例其补位过程如下:初始的信息摘要: 01100001 01100010 01100011第一步补位:01100001 01100010 011000111最后一位补位: 01100001 01100010 01100011 10...0(后面补了423个0)
之后将补位操作后的信息摘要转换为十六进制:
61626380 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000
3)附加长度值
在信息摘要后面附加64比特的信息用来表示原始信息摘要的长度在这步操作之后信息报文便是512比特的倍数。通常来说用一个64位的数据表示原始消息的长度如果消息长度不大于2那么前32比特就为0在进行附加长度值操作后其“abc数据报文即变成如下形式:
61 62638000000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 0000001 8
因为“abc”占3个字节即24位所以换算为十六进制后为0x18。
4)初始化缓存
一个160位MD缓冲区用以保存中间和最终散列函数的结果。它可以表示为5个32
位的寄存器(H0H1H2H3H4)。初始化如下:
HO 0x67452301
H2 0x98BADCFE
H3 0x10325476
H4 0xC3D2E1F0
如果大家对MD-5不陌生的话会发现一个重要的现象其前四个与MD-5一样
但不同之处是存储为Big-EndienFormat。 四、算法实现
(2)利用VC语言实现SHA- 1算法。
#include iostream
#include string
#include iomanip
#include sstream
#include Windows.h
#include wincrypt.h// 函数声明
std::string sha1(const std::string input);int main() {std::string data Hello, SHA-1!;std::string hash sha1(data);std::cout SHA-1 Hash: hash std::endl;return 0;
}// SHA-1算法实现
std::string sha1(const std::string input) {HCRYPTPROV hCryptProv;HCRYPTHASH hHash;BYTE rgbHash[20];DWORD cbHash 20;if (!CryptAcquireContext(hCryptProv, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT))return ;if (!CryptCreateHash(hCryptProv, CALG_SHA1, 0, 0, hHash)) {CryptReleaseContext(hCryptProv, 0);return ;}if (!CryptHashData(hHash, (const BYTE*)input.c_str(), input.length(), 0)) {CryptReleaseContext(hCryptProv, 0);CryptDestroyHash(hHash);return ;}if (!CryptGetHashParam(hHash, HP_HASHVAL, rgbHash, cbHash, 0)) {CryptReleaseContext(hCryptProv, 0);CryptDestroyHash(hHash);return ;}std::stringstream ss;for (int i 0; i cbHash; i) {ss std::hex std::setw(2) std::setfill(0) (int)rgbHash[i];}CryptDestroyHash(hHash);CryptReleaseContext(hCryptProv, 0);return ss.str();
}运行结果 (3) 分析SHA-1算法的性能:
SHA-1是一种哈希算法通常用于数据完整性验证和数字签名。然而随着时间的推移SHA-1的性能和安全性受到了挑战因此在实际应用中要谨慎使用。
性能分析包括以下方面
a. 计算速度SHA-1的计算速度通常较快适用于快速生成哈希值。
b. 安全性SHA-1不再被认为是安全的哈希算法因为已经出现了碰撞攻击可以生成两个不同的输入它们产生相同的SHA-1哈希值。这使得SHA-1不适合用于敏感数据的加密或签名。
c. 应用领域SHA-1仍然可以用于一些非安全性要求严格的应用例如在校验数据完整性时。但对于需要高安全性的应用应该选择更安全的哈希算法如SHA-256或SHA-3。 五、实验心得
SHA-1是一个基于位运算和逻辑运算的哈希算法它将输入数据转化为固定长度160位的哈希值。SHA-1在性能方面通常表现良好但已不再被认为是安全的哈希算法。因此建议在应用中使用更安全的哈希算法特别是需要保护敏感数据的情况。SHA-256和SHA-3等算法提供了更高的安全性可以满足更严格的安全要求。在实现SHA-1算法时需要将输入字符串转换为适当格式并填充数据以确保数据长度满足SHA-1算法的要求。包括位填充和附加数据长度。通过实验我了解SHA-1算法中的各个步骤包括信息的分块、扩展消息、初始化哈希值、迭代运算等。这有助于更好地理解SHA-1的内部工作原理。此次实验使我加深了对哈希算法的理解提高了编程能力。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/932433.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!