没有合适的资源?快使用搜索试试~ 我知道了~
首页实验五:安全Hash算法SHA-1的实现
资源详情
资源评论
资源推荐

实验五:安全 Hash 算法 SHA-1 的实现
姓名 班级 学号
实验目的
Hash 函数是提供数据完整性保障的一个重要工具。本次实验,我们希望通过上机操作,使
同学们对安全 Hash 算法 SHA-1 的基本原理有一个全面的理解。通过本次实验,使学生掌握对
Hash 函数的应用,为后面数字签名方案的学习打下基础。
实验内容及要求
给定如下消息 x:
‘cryptographyisthepracticeandstudyoftechniquesforsecurecommunicationi
nthepresenceofthirdpartiesmoregenerallyitisaboutconstructingandanalyz
ingprotocolsthatovercometheinfluenceofadversariesandwhicharerelatedto
variousaspectsininformationsecuritysuchasdataconfidentialitydatainteg
rityauthenticationandnonrepudiationmoderncryptographyintersectsthedis
ciplinesofmathematicscomputerscienceandelectricalengineeringapplicati
onsofcryptographyincludeATMcardscomputerpasswordsandelectroniccommerc
e’
利用填充方案 SHA-1-PAD 给出对消息的填充,并编程给出 SHA-1(x)。
实验结果(可续页)(包括实验代码、实验结果)
一、
实验说明:
本实验主要分为:
算法 SHA-1-PAD 填充算法,
密码体制 SHA-1
一些面向字的操作如:
YX
;
YX
;
YX
;
X
;
YX
;
)(XROTL
S
),,( DCBf
t
.
实验分析:
SHA-1-PAD:
采用 vector<vector<int> >result 来存储 x,先将其按 64 位一段截取放入一个字缓冲区,
剩下的判断长度:
大于 447 位的需要多开两个字缓冲区
否则只需多开一个自缓冲区
然后添加 1bit1,再补 0,直到模 512 余 448
之后将|x|的大小存储进 l,l 不足 64bits,则左边补 0
返回 result
二、运行结果

三、实验代码
#include <iostream>
#include <vector> //定义 vector 数组
#include <string> //记录消息
using namespace std;
const int NUM = 8; //一个字由 32 比特(或者 8 个 16 进制数)
const int BIT = 512; //消息认证码要以 512 比特一组
//字常量
string H0 = "67452301";
string H1 = "EFCDAB89";
string H2 = "98BADCFE";
string H3 = "10325476";
string H4 = "C3D2E1F0";
//定义 SHA1(安全哈希算法)类
class SHA1
{
public:
//将一个字符串形式的字转化为 vector 数组
vector<int> hex_into_dec(string word);
//将 vector 转化为 string 字符串形式
string num_into_message(vector<int> A);
//两个字 X 和 Y 的逻辑"和"
vector<int> word_AND(vector<int> A,vector<int> B);

//两个字 X 和 Y 的逻辑"或"
vector<int> word_OR(vector<int> A,vector<int> B);
//两个字 X 和 Y 的逻辑"异或"
vector<int> word_XOR(vector<int> A,vector<int> B);
//两个字 X 和 Y 的逻辑"补"
vector<int> word_COMPLEMENT(vector<int> A);
//两个字 X 和 Y 的摸 2^32 整数加
vector<int> word_ADD(vector<int> A,vector<int> B);
//将字 X 循环左移 s 个位置
vector<int> ROTL(vector<int> A,int s);
//SHA-1 的填充方案,我们设定 msg 由 ASCII 码组成
vector<vector<int> > SHA_1_PAD(string msg);
//将 SHA-1 压成以字为单位
vector<vector<vector<int> > > compress(vector<vector<int> > result);
//定义 ft 函数,每个 ft 函数都有 B,C,D 三个字作为输入,并产生一个字作为输出
vector<int> Ft(int t,vector<int> B,vector<int> C,vector<int> D);
//定义字常数 K
vector<int> K(int t);
//开始进行 SHA-1(安全 Hash 算法)的加密
vector<vector<int> > SHA_1(string msg);
};
//将 vector 转化为 string 字符串形式
string SHA1::num_into_message(vector<int> A)
{
int i;
string msg = "";
for(i = 0;i < A.size();i++)
{
if(A[i] >= 0 && A[i] <= 9)
msg += '0' + A[i];
else if(A[i] >= 10 && A[i] <= 15)
msg += 'A' + (A[i] - 10);
剩余11页未读,继续阅读

















安全验证
文档复制为VIP权益,开通VIP直接复制

评论0