实现加密解密程序
目 录
一. 摘要„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„1
二. 网络安全简„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„2 安全技术手段„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„.3
三. 现代密码技术分类„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„3
1.对称密码体制„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„4
2.非对称密码体制„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„4
四.RSA 加密解密体制„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„5
1.RSA 公钥密码体制概述„„„„„„„„„„„„„„„„„„„„„„„„„„„„„5
2.RSA 公钥密码体制的安全性„„„„„„„„„„„„„„„„„„„„„„„„„„„6
3.RSA 算法工作原理„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„6
五. 实现RSA 加密解密算法„„„„„„„„„„„„„„„„„„„„„„„„„„„„„7
六.RSA 的安全性„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„11
七.结语„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„. „„13
实现加密解密程序
摘要:随着计算机网络的广泛应用,网络信息安全的重要性也日渐突出,计算机信息的保密问题显得越来越重要,无论是个人信息通信还是电子商务发展,都迫切需要保证Internet 网上信息传输的安全,需要保证信息安全;网络安全也已经成为国家、国防及国民经济的重要组成部分。密码技术是保护信息安全的最主要手段之一。使用密码技术可以防止信息被篡改、伪造和假冒。加密算法:将普通信息(明文)转换成难以理解的资料(密文)的过程;解密算法则是其相反的过程:由密文转换回明文;密码机包含了这两种算法,一般加密即同时指称加密与解密的技术。
关键字:密码技术、加密算法、解密算法、密码机、RSA
正文
一、网络安全简介
网络安全是指网络系统的硬件、软件及其系统中的数据受到保护,不因偶然的或者恶意的原因而遭受到破坏、更改、泄露,系统连续可靠正常地运行,网络服务不中断。网络安全从其本质上来讲就是网络上的信息安全。从广义来说,凡是涉及到网络上信息的保密性、完整性、可用性、真实性和可控性的相关技术和理论都是网络安全的研究领域。网络安全是一门涉及计算机科学、网络技术、通信技术、密码技术、信息安全技术、应用数学、数论、信息论等多种学科的综合性学科。
网络安全的具体含义会随着“角度”的变化而变化。比如:从用户(个人、企业等)的角度来说,他们希望涉及个人隐私或商业利益的信息在网络上传输时受到机密性、完整性和真实性的保护,避免其他人或对手利用窃听、冒充、篡改、抵赖等手段侵犯用户的利益和隐私。
二、安全技术手段
物理措施:保护网络关键设备(如交换机、路由器、服务器、大型计算机等) ,制定严格的网络安全规章制度,采取防火、防辐射、安装不间断电源(UPS )等措施。
访问控制:对用户访问网络资源的权限进行严格的认证和控制。例如,进行用户身份认证,对口令加密、更新和鉴别,设置用户访问目录和文件的权限,控制网络设备配置的权限,等等。
数据加密:加密是保护数据安全的重要手段。数据加密是对网络中传输的数据进行加密,到达目的地后再解密还原为原始数据,保障信息被人截获后不能读懂其含义,目的是防止非法用户截获后盗用信息。防止计算机网络病毒,安装网络防病毒系统。
其他措施:其他措施包括信息过滤、容错、数据镜像、数据备份和审计等。近年来,围绕网络安全问题提出了许多解决办法,例如防火墙技术等。防火墙技术是通过对网络的隔离和限制访问等方法来控制网络的访问权限,从而保护网络资源。防火墙不仅仅是路由器、堡垒主机、或任何提供网络安全的设备的组合,防火墙是安全策略的一个部分。其他安全技术包括密钥管理、数字签名、认证技术、智能卡技术和访问控制等等。
安全策略建立全方位的防御体系,甚至包括:告诉用户应有的责任,公司规定的网络访问、服务访问、本地和远地的用户认证、拨入和拨出、磁盘和数据加密、病毒防护措施,以及雇员培训等。所有可能受到攻击的地方都必须以同样安全级别加以保护。仅设立防火墙系统,而没有全面的安全策略,那么防火墙就形同虚设。
三、现代密码技术分类
根据密钥类型不同将现代密码技术分为两类:一类是对称加密(秘密钥匙加密)系统,另一类是公开密钥加密(非对称加密)系统。
1.对称密码体制
对称密码体制是一种传统密码体制,也称为私钥密码体制。在对称加密系统中,加密和解密采用相同的密钥。因为加解密密钥相同,需要通信的双方必须选择和保存他们共同的密钥,各方必须信任对方不会将密钥泄密出去,这样就可以实现数据的机密性和完整性。对于具有n 个用户的网络,需要n(n-1)/2个密钥,在用户群不是很大的情况下,对称加密系统是有效的。但是对于大型网络,当用户群很大,分布很广时,密钥的分配和保存就成了问题。
在对称密钥密码体系中,也许对不同的信息使用不同的密钥,但都面临密钥管理
的难题。由于每对通讯方都必须使用异于他组的密钥,当网络成员的数量增加时,密钥数量成二次方增加。更尴尬的难题是:当安全的通道不存在于双方时,如何建立一个共有的密钥以利安全的通讯?如果有通道可以安全地建立密钥,何不使用现有的通道。这个矛盾是长年以来密码学无法在真实世界应用的阻碍。
2.非对称密码体制
非对称密码体制也叫公钥加密技术,是针对私钥密码体制的缺陷被提出来的。相对于对称密钥密码体系,最大的特点在于加密和解密使用不同的密钥。由于加密和解密是相对独立的,加密和解密会使用两把不同的密钥,加密密钥向公众公开,谁都可以使用,解密密钥只有解密人自己知道,非法使用者根据公开的加密密钥无法推算出解密密钥,故其可称为公钥密码体制。假如一个人选择并公布了他的公钥,另外任何人都可以用这一公钥来加密传送给那个人的消息。私钥是秘密保存的,只有私钥的所有者才能利用私钥对密文进行解密。
公开密钥系统通常是复合式的,内含一个高效率的对称密钥算法,用以加密信息,再以公开密钥加密对称钥匙系统所使用的钥匙,以增进效率。
(1)解决大规模网络应用中密钥的分发和治理问题
采用分组密码、序列密码等对称密码体制时,加解密双方所用的密钥都是秘密的,而且需要定期更换,新的密钥总是要通过某种秘密渠道分配给使用方,在传递的过程中,稍有不慎,就轻易泄露。公钥密码加密密钥通常是公开的,而解密密钥是秘密的,由用户自己保存,不需要往返交换和传递,大大减少了密钥泄露的危险性。同时,在网络通信中使用对称密码体制时,网络内任何两个用户都需要使用互不相同的密钥,只有这样,才能保证不被第三方窃听,因而N 个用户就要使用N (N –1)/2个密钥。采用公钥密码体制,N 个用户只需要产生N 对密钥。由此可见,只有公钥密码才能方便、可靠地解决大规模网络应用中密钥的分发和治理问题。
(2)实现网络中的数字签名机制
长期以来的日常生活中,对于重要的文件,为了防止对文件的否认,伪造,篡改等等的破坏,传统的方法是在文件上手写签名。但是在计算机系统中无法使用手写签名,而代之对应的数字签名机制。数字签名应该能实现手写签名的作用,其本质特征就是仅能利用签名者的私有信息产生签名。对称密钥技术由于其自身的局限性,无法提供网络中的数字签名。这是因为数字签名是网络中表征人或机构的真实性的重要手
段,数字签名的数据需要有惟一性、私有性,而对称密钥技术中的密钥至少需要在交互双方之间共享,因此,不满足惟一性、私有性,无法用做网络中的数字签名。相比之下,公钥密码技术由于存在一对公钥和私钥,私钥可以表征惟一性和私有性,而且经私钥加密的数据只能用与之对应的公钥来验证,其他人无法仿冒,所以,可以用做网络中的数字签名服务。当它被验证时,它也能被信任的第三方(如法官)在任一时刻证实只有私有信息的唯一把握者才能产生此签名。其特点:签名是可信的,签名是不能伪造的,签名是不可重用的,签名后的文件是不能更改的,签名是不能否认的。
四、RSA 加密解密体制
1.RSA 公钥密码体制概述
RSA 算法于1977年由美国麻省理工学院的RonalRivest 、AdiShamir 、LenAdleman 三位年轻教授提出。该算法利用了数论领域的一个事实:把两个大质数相乘生成一个合数是件十分容易的事情,但要把一个合数分解为两个质数却十分困难,是一种分组密码体制。合数分解问题目前仍然是数学领域尚未解决的一大难题,至今没有任何高效的分解方法。它无需收发双方同时参与加密过程,且非常适合于电子函件系统的加密。
RSA 建立方法如下:首先随机选两个大素数p 、q ,计算n=p%26#8226;q ;计算欧拉函数φ(n)=(p-1)(q-1);任选一个整数e 为公开加密密钥,由e 求出秘密解密密钥加密/解密:将明文分成长度小于位的明文块m ,加密过程是:c=E(m,e)=modn解密过程是:m=D(c,d)=modn
2.RSA 公钥密码体制的安全性
RSA 的安全性依靠于大整数的因式分解问题。实际上,人们推测RSA 的安全性依靠于大整数的因式分解问题,但谁也没有在数学上证实从c 和e 计算m 需要对n 进行因式分解。可以想象可能会有完全不同的方式去分析RSA 。然而,假如这种方法能让密码解析员推导出d ,则它也可以用作大整数因式分解的新方法。最难以令人置信的是,有些RSA 变体已经被证实与因式分解同样困难。甚至从RSA 加密的密文中恢复出某些特定的位也与解密整个消息同样困难。
由于进行的都是大数计算,使得RSA 最快的情况也比DES 慢上100倍,无论是软件还是硬件实现。速度一直是RSA 的缺陷。一般来说只用于少量数据加密。
3.RSA 算法工作原理
首先,找出三个数,p ,q ,r ,其中p ,q 是两个相异的质数,r 是与(p-1)(q-1)互质的数......p ,q ,r 这三个数便是privatekey 接着,找出m ,使得
rm==1mod(p-1)(q-1).....这个m 一定存在,因为r 与(p-1)(q-1)互质,用辗转相除法就可以得到了..... 再来,计算n=pq.......m,n 这两个数便是publickey 编码过程是,若资料为a ,将其看成是一个大整数,假设a=n的话,就将a 表成s 进位(s%26lt:=n,通常取s=2^t),则每一位数均小于n ,然后分段编码...... 接下来,计算
b==a^mmodn,(0%26lt:=b若p ,q 是相异质数,rm==1mod(p-1)(q-1),a 是任意一个正整数,b==a^mmodpq,c==b^rmodpq,则c==amodpq证实的过程,会用到费马小定理,叙述如下:m 是任一质数,n 是任一整数,则n^m==nmodm%26lt:证实%26gt:因为rm==1mod(p-1)(q-1),所以rm=k(p-1)(q-1)+1,其中k 是整数因为在modulo 中是preserve 乘法的(x==ymodzandu==vmodz=%26gt:xu==yvmodz),所以
c==b^r==(a^m)^r==a^(rm)==a^(k(p-1)(q-1)+1)modpq
(1)假如a 不是p 的倍数,也不是q 的倍数时:
则a^(p-1)==1modp(费马小定理)=%26gt:
a^(k(p-1)(q-1))==1modpa^(q-1)==1modq(费马小定理)=%26gt:
a^(k(p-1)(q-1))==1modq所以p ,q 均能整除a^(k(p-1)(q-1即
a^(k(p-1)(q-1))==1modpq即a^(k(p-1)(q-1))==1modpq=%26gt:
c==a^(k(p-1)(q-1)+1)==amodpq
(2)假如a 是p 的倍数,但不是q 的倍数时:
则a^(q-1)==1modq(费马小定理)=%26gt:a^(k(p-1)(q-1))==1modq
=%26gt:c==a^(k(p-1)(q-1)+1)==amodq=%26gt:q|c-a
因p|a=%26gt:c==a^(k(p-1)(q-1)+1)==0modp=%26gt:p|c-a
所以,pq|c-a=%26gt:c==amodpq
(3)假如a 是q 的倍数,但不是p 的倍数时,证实同上
(4)假如a 同时是p 和q 的倍数时:
则pq|a=%26gt:c==a^(k(p-1)(q-1)+1)==0modpq=%26gt:pq|c-a
=%26gt:c==amodpq
这个定理说明a 经过编码为b 再经过解码为c 时,a==cmodn(n=pq)但我们在做编码解码时,限制0%26lt:=a
做到编码解码的功能。
五、实现RSA 加密解密算法
文件分别命名为gjsRSA.h 、gjsRSA.cpp ,实现了数据的加密和解密过程,是本程序的核心部分,也是RSA 加密算法的关键。该部分程序基于RSA 加解密原理,生成互素的两个大数p 、q ,得到Φ(n );生成与Φ(n )互素的数e ,然后利用Euclid 算法计算得到d 。最后实现加密过程ci=mi^e(modn)(a),反过来也可以实现解密mi=ci^d(modn)(b)。
具体代码如下:
#include
#include
#include
#include
#include
using namespace std;
inline unsigned long RsaEncryption(unsigned long OL,
const unsigned long NMAX,
const unsigned long e,
vector &vc1,
vector &vc2)//加密
{
vector::iterator it1;
static unsigned long d(1);
unsigned long m_prime;
while(((e*d) % OL) !=1)
{
d += 1;
}
cout
for(it1 = vc1.begin(); it1 !=vc1.end(); it1++)
{
m_prime = *it1;
for(unsigned int i = 1; i
{
m_prime %= NMAX;
m_prime = *it1 * m_prime;
}
m_prime %= NMAX;
vc2.push_back(m_prime);
}
vc1.clear();
return d;
}//解密
inline unsigned long RsaDeciphering(unsigned long d,
const unsigned long NMAX,
vector &vc2,
vector &vc3) //解密 {
unsigned long m_prime;
vector v3, v4;//v4记录
vector::iterator it1, it2;
for(it1 = vc2.begin(); it1 !=vc2.end(); it1++)
{
m_prime = *it1;
for(unsigned int i = 1; i
{
m_prime %= NMAX;
m_prime = *it1 * m_prime;
}
m_prime %= NMAX;
vc3.push_back(m_prime);
}
vc2.clear();
return 0;
}//解密
int main()
{
unsigned long NMAX(0), OL(0);
unsigned long p, q,e, d(1); //这里d 选取3
unsigned long shujv;
int x(0);
vector vc1, vc2, vc3;
vector::iterator it1;
cout> p>> q>> e;
while(p%2 ==0 || q%2 ==0)
{
cout
cin>>p>>q>>e;
}
NMAX = p*q;
OL = (p-1)*(q-1);
cout
cin>>x;
for(int i = 0; i
{
cin>>shujv;
vc1.push_back(shujv);
}
cout
for(it1 = vc1.begin(); it1 != vc1.end(); it1++)
{
cout
}
cout
d = RsaEncryption(OL, NMAX, e, vc1, vc2);
cout
for(it1 = vc2.begin(); it1 != vc2.end(); it1++)
{
cout
}
cout
RsaDeciphering(d, NMAX, vc2, vc3);
cout
for(it1 = vc3.begin(); it1 != vc3.end(); it1++)
{
cout
}
cout
return 0;
}
RSA 的安全性
不能证明RSA 密码破译等同于大数因子分解
速度问题 提高p•q将使开销指数级增长
至少有9个明文,加密后不变,即m e mod n=m
普通用户难于选择p 、q 。对p 、q 的基本要求:
p 、q 不相同,即不要太接近,又不能差别太大
p-1、q-1都有大素数因子,增加猜测φ(r) 难度
Gcd( p-1,q-1)应当小
结语:网络安全是当今网络社会焦点中的焦点,病毒、黑客的猖獗使身处今日网络社会的人们感到谈网色变,无所适从。但我们必须清楚地认识到,安全问题的解决不可能一蹴而就。现代的电脑加密技术就是适应网络安全的需要应运而生的,它为一般的电子商务活动提供了安全保障,如在网络中进行文件传输、电子邮件往来和进行合同文本的签署等。在网络安全方面,除了加密外我们别无选择。
致谢
首先,我很感谢刘老师给带我们一起学习了网络与信息安全这门课程,并且指导我们进行了课程实验以及课程设计上机实践,通过对这门课的学习我学会了很多专业知识;也很感谢刘老师给了我们一个有选择性的课程设计题目,我们通过对各种问题的解决,更提高了分析问题、解决问题的能力以及实践动手能力;最后也很感谢我身边的所有朋友对我的帮助,在我学习中遇到困难的时候是他们给了我大力的支持。 参考书目:
[1]《信息安全概论》高等教育出版社段云所等编著
[2]《计算机系统安全》重庆出版社卢开澄等编著
[3]《计算机密码应用基础》科学出版社朱文余等编著
[4]《密码分析学》北京:清华大学出版社冯登国编著
[5]嬴政天下. 加密算法之RSA 算法