2024年4月29日发(作者:)

====Word行业资料分享--可编辑版本--双击可删====

实验三 RSA算法和SHA1哈希算法

古典密码算法曾经被广泛应用,大都比较简单,使用手工和机械操作来实现加密和解密。它的主

要对象是文字信息,利用密码算法实现文字信息的加密和解密。古典密码学可以分为代替密码(也叫

做移位密码)和置换密码(也叫做换位密码)两种,其中代替密码典型的有Caesar密码,数乘密码和

仿射变换等,置换密码有单表置换和多表置换等。

一、 实验目的

1. 理解代替密码学加密过程

2. 理解置换密码学加密过程

二、 实验环境

Windows,交换网络结构,每组2人,,密码工具

三、 实验原理

1. 非对称密钥加密也称为公开密钥加密,或者叫做公钥加密算法。使用公开密钥密码的每一个用户

都分别拥有两个密钥:加密密钥和解密密钥,它们两者并不相同,并且由加密密钥得到解密密钥

在计算机上是不可行的。每一个用户的加密密钥都是公开的。因此,加密密钥也称为公开密钥。

所有用户的公开密钥都将记录在作用类似于电话号码薄的密钥本上,而它可以被所有用户访问,

这样每一个用户都可以得到其他所有用户的公开密钥。同时,每一个用户的解密密钥将由用户保

存并严格保密。因此,解密密钥也称为私有密钥。RSA加密算法利用了数论领域的一个事实,那

就是虽然把两个大质数相乘生成一个合数是件十分容易的事情,但要把一个合数分解为两个质数

的乘积却十分困难。合数分解问题目前仍然是数学领域尚未解决的一大难题,至今没有任何高效

的分解方法。它无须收发双方同时参与加密过程,既可以用于保密也可以用于签名,因而非常适

合于电子邮件系统的加密,互连网和信用卡安全系统。

RSA算法的加密和解密过程

在RSA算法中,每个实体有自己的公钥(e,n)及私钥(d,n),其中n = p*q,p,q是两个大素数,

e*d = 1 mod ф(n),显然e应该满足gcd(e,ф(n))= 1。实体B加密消息m,将密文在公开信道上

传送给实体A。实体A接到密文后对其解密。具体算法如下。

 公钥的生成算法

RSA的公钥生成算法十分简单,可以分为四步:

a) 选择两个素数,p和q;

b) 计算n = p×q和z = (p-1)×(q-1);

c) 选择一个与z互质的数d;

d) 找出一个e,使得e×d = 1 mod z。

公开密钥是由(e,n)构成,私有密钥由(d,n)构成。

 加密算法

实体B的操作如下:

a) 得到实体A的真实公钥(e,n);

b) 把消息表示成整数m,0<m≤n-1;

c) 使用平方-乘积算法,计算C = Ek(m) = me mod n;

d) 将密文C发送给实体A。

 解密算法

实体A接收到密文C,使用自己的私钥d计算m = Dk(C)= Cd mod n,m∈Zn。

源-于-网-络-收-集

====Word行业资料分享--可编辑版本--双击可删====

我们选择p = 3,q = 11,得到n = 33,z =(p-1)×(q-1)= 2×10 = 20。由于和20互质,故设d = 7。

对于所选的d = 7,解方程7×e = 1 mod 20,可以得到e = 3。

在我们的例子中,由于所选的p和q太小,破译当然很容易,我们的例子只是用来说明此算法的

原理。对于明文SUZANNE,RSA的加密和解密过程如表3-1所示。

表3-1 RSA加解密过程示例

加密

明文(m)

S

U

Z

A

N

N

E

m

e

解密

文(C)

密文

(C)

3

C

d

明文(m)

19

21

26

1

14

14

5

m

3

m(mod33) m(mod33)

28

21

20

1

5

5

26

28

21

20

1

5

5

26

3

C

7

19

21

26

1

14

14

5

符号

S

U

Z

A

N

N

E

6859

9261

17576

1

2744

2744

125

1801088541

1280000000

1

78125

78125

8031810176

2. 散列函数(Hash Functions)就是能提供数据完整性保障的一个重要工具。Hash函数常用来构造数据

的短“指纹”,消息的发送者使用所有的消息产生一个短“指纹”,并将该短“指纹”与消息一起

传输给接收者。即使数据存储在不安全的地方,接收者重新计算数据的指纹,并验证指纹是否改

变,就能够检测数据的完整性。这是因为一旦数据在中途被破坏或改变,短指纹就不再正确。

散列函数是一个函数,它以一个变长的报文作为输入,并产生一个定长的散列码,有时也称为报

文摘要,作为函数的输出。散列函数最主要的作用是用于鉴别,鉴别在网络安全中起到举足轻重

的地位。鉴别的目的有以下两个:第一,验证信息的发送者不是冒充的,同时发信息者也不能抵

赖,此为信源识别;第二,验证信息完整性,在传递或存储过程中未被篡改,重放或延迟等。

(1) SHA1哈希算法流程

对于任意长度的明文,SHA1首先对其进行分组,使得每一组的长度为512位,然后对这些明文分

组反复重复处理。

对于每个明文分组的摘要生成过程如下:

 将512位的明文分组划分为16个子明文分组,每个子明文分组为32位。

 申请5个32位的链接变量,记为A、B、C、D、E。

 16份子明文分组扩展为80份。

 80份子明文分组进行4轮运算。

 链接变量与初始链接变量进行求和运算。

 链接变量作为下一个明文分组的输入重复进行以上操作。

 最后,5个链接变量里面的数据就是SHA1摘要。

(2) SHA1的分组过程

对于任意长度的明文,SHA1的明文分组过程与MD5相类似,首先需要对明文添加位数,使明文

总长度为448(mod512)位。在明文后添加位的方法是第一个添加位是l,其余都是0。然后将真正明

文的长度(没有添加位以前的明文长度)以64位表示,附加于前面已添加过位的明文后,此时的明文

长度正好是512位的倍数。与MD5不同的是SHA1的原始报文长度不能超过2的64次方,另外SHA1

源-于-网-络-收-集