计算机网络安全实验报告--非对称密码算法RSA
- 格式:pdf
- 大小:246.08 KB
- 文档页数:10
RSA公钥密码算法RSA公钥密码算法RSA(Rivest-Shamir-Adleman)是一种公钥密码算法,也是目前公认的最安全的加密算法之一。
它是由三位数学家Rivest、Shamir和Adleman在1977年提出的,由他们的姓氏命名。
RSA算法是第一个既能用于数据加密、又能用于数字签名的算法。
在RSA加密算法中,生成一对密钥,一个是公开的(称为公钥),一个是保密的(称为私钥)。
公钥和私钥是一对,用公钥加密的数据只能用私钥解密。
用私钥加密的数据只能用公钥解密。
而且公钥是可以公开的,它通常用于加密的数据,私钥通常用于解密的数据,用于签名的也是私钥。
RSA的安全基于大整数分解的难度。
RSA加密算法是非对称加密算法。
“非对称”指的是加密和解密使用的密钥是不同的,即一个用来加密,一个用来解密。
RSA加密算法的实现过程主要包括密钥生成、加密和解密三个部分。
密钥生成。
密钥生成包括选择两个不同的大质数p和q,计算n=p*q,然后计算欧拉函数φ(n)=(p-1)(q-1),然后获得整数e,使得1<e<φ(n)且e与φ(n)互素,e和φ(n)构成一对公钥,然后计算整数d,使得d*e ≡1(mod φ(n)),d和φ(n)构成一对私钥。
其中n是密钥长度,e是公钥指数,d是私钥指数。
加密和解密。
加密过程是明文M经过公钥e加密成密文C:C ≡ M^e(mod n)。
解密过程是密文C经过私钥d解密成明文M:M ≡ C^d(mod n)。
公钥(n, e)用于加密,私钥(n, d)用于解密。
RSA算法的安全性依赖于大数分解的困难性。
即使是今天最快的计算机,在有限的时间内也无法很好地分解一个非常大的、合数的公共模数。
这使得RSA算法成为一种安全可靠的加密方法。
同时RSA算法也被广泛应用于数字签名和密钥交换等领域。
除了加密和解密外,RSA算法还可以用于数字签名,这是因为私钥可以用于对数据进行签名,公钥可以用于验证签名。
非对称加密算法的研究与应用第一章:引言近年来,随着信息技术的飞速发展,人们对于信息安全的需求变得越来越迫切。
而在信息安全领域中,加密技术起到了至关重要的作用。
其主要作用是将原始数据进行加密处理,只有经过特定的解密手段才能够还原数据。
其中,非对称加密算法是一种十分常见且重要的加密技术。
本文将会深入探讨非对称加密算法的研究与应用。
第二章:非对称加密算法的基础知识1. 概念定义非对称加密算法也被称为公钥密码体制,它的加密和解密过程中使用了不同的密钥,即公钥(public key)和私钥(private key)。
公钥由所有人共享,而私钥则只有指定的人或组织知道。
通信双方使用公钥加密数据,但只有私钥的持有者才能解密数据。
2. 算法原理其基本思想是利用一张公开的密钥和一张私有的密钥,通过密钥运算的方式来对数据进行加密和解密。
这样就可以保证数据传输过程中即使被截获,也无法获取具体的数据内容。
3. 算法特点非对称加密算法具有以下几个特点:(1)安全性高:由于非对称加密算法使用了两个不同的密钥,因此即使公钥被攻击者获得,也无法推导出私钥。
(2)算法复杂度高:与对称加密算法相比,非对称加密算法的计算复杂度更高,这使得攻击者难以破解密文。
(3)密钥管理复杂:由于算法需要公钥和私钥两张密钥,因此密钥管理会更加复杂。
第三章:非对称加密算法的应用领域1. 网络安全在计算机网络环境下,非对称加密算法可以用于身份验证、消息完整性验证、数据加密等方面。
例如,HTTPS协议就使用了非对称加密算法对数据进行加密。
2. 电子商务在电子商务领域中,非对称加密算法可以保证传输的用户信息的安全,如支付信息、信用卡信息、个人信息等。
3. 数字签名非对称加密算法可以用于生成和验证数字签名。
数字签名可以防止信息被篡改,确保信息的完整性和真实性。
第四章:非对称加密算法的应用实例1. RSA算法RSA算法是非对称加密算法中最有名的一种。
它以三位数乘法为基础,可以用于数据加密和数字签名。
第1篇一、实验目的1. 了解现代密码学的基本原理和数论基础知识;2. 掌握非对称密码体制的著名代表RSA加密算法的工作原理和流程;3. 设计实现一个简单的密钥系统;4. 掌握常用加密算法AES和DES的原理及实现。
二、实验内容1. RSA加密算法实验2. AES加密算法实验3. DES加密算法实验三、实验原理1. RSA加密算法RSA算法是一种非对称加密算法,由罗纳德·李维斯特、阿迪·沙米尔和伦纳德·阿德曼三位密码学家于1977年提出。
其基本原理是选择两个大质数p和q,计算它们的乘积n=pq,并计算欧拉函数φ(n)=(p-1)(q-1)。
选择一个整数e,满足1<e<φ(n)且e与φ(n)互质。
计算e关于φ(n)的模逆元d。
公开密钥为(e,n),私有密钥为(d,n)。
加密过程为C=Me mod n,解密过程为M=Cd mod n。
2. AES加密算法AES(Advanced Encryption Standard)是一种分组加密算法,采用128位分组大小和128、192或256位密钥长度。
AES算法主要分为四个阶段:初始轮、密钥扩展、中间轮和最终轮。
每个轮包括字节替换、行移位、列混淆和轮密钥加。
3. DES加密算法DES(Data Encryption Standard)是一种分组加密算法,采用64位分组大小和56位密钥长度。
DES算法主要分为16轮,每轮包括置换、置换-置换、S盒替换和密钥加。
四、实验步骤及内容1. RSA加密算法实验(1)选择两个大质数p和q,计算n=pq和φ(n)=(p-1)(q-1);(2)选择一个整数e,满足1<e<φ(n)且e与φ(n)互质,计算e关于φ(n)的模逆元d;(3)生成公开密钥(e,n)和私有密钥(d,n);(4)用公钥对明文进行加密,用私钥对密文进行解密。
2. AES加密算法实验(1)选择一个128、192或256位密钥;(2)初始化初始轮密钥;(3)进行16轮加密操作,包括字节替换、行移位、列混淆和轮密钥加;(4)输出加密后的密文。
云南大学数学与统计学实验教学中心实验报告课程名称:近代密码学年级:2010级上机实践成绩:指导教师:陆正福姓名:段飞龙上机实践名称:RSA实现学号:20101910050上机实践日期:上机实践编号:No.1组号:上机实践时间:一、实验目的配置gmp环境,并对其进行测试;通过gmp实现RSA加密、解密。
二、实验内容1、配置gmp环境,并对其进行测试;2、编程实现RSA非对称密码算法。
三、实验环境Ubuntu、VC四、实验结果1.对gmp的测试结果如下:1)对加法运算进行测试的结果:the n is 1the sum is 0the n is 101the sum is 338350the n is 1001the sum is 333833500the n is 10001the sum is 333383335000the n is 100001the sum is 333338333350000the n is 1000001the sum is 333333833333500000the n is 10000001the sum is 333333383333335000000the n is 100000001the sum is 333333338333333350000000the n is 1000000001the sum is 333333333833333333500000000the sum is 4572473700731595796547782352)对乘法运算进行测试的结果:1234567823456789the result is 289589963907942.2.测试输入的字符串为最大长度(在此例中取最大长度为:10)的字符串时的结果:Input maxlength of message:10Main menu:[1] Encryption![2] Deciphering![3] Out put the secret key of encryption ![4] Out put the secret key of deciphering ![0] Exit!Input your option:3The secret key of encryption is (d,n): 42205697771567903916803097123, 87144653527546255677906076663Main menu:[1] Encryption![2] Deciphering![3] Out put the secret key of encryption ![4] Out put the secret key of deciphering ![0] Exit!Input your option:4The secret key of decipering is (e,n): 2340244659714722280430171267, 87144653527546255677906076663Main menu:[1] Encryption![2] Deciphering![3] Out put the secret key of encryption ![4] Out put the secret key of deciphering ![0] Exit!Input your option:1Input a message:1234567890The ciphertext is c: 26935842609122606219432699240Main menu:[1] Encryption![2] Deciphering![3] Out put the secret key of encryption ![4] Out put the secret key of deciphering ![0] Exit!Input your option:2Input the ciphertext:26935842609122606219432699240message is 1234567890Main menu:[1] Encryption![2] Deciphering![3] Out put the secret key of encryption ![4] Out put the secret key of deciphering ![0] Exit!Input your option:03.测试输入的字符串小于最大长度(在此例中取最大长度为:50)的字符串时的结果:Input maxlength of message:50Main menu:[1] Encryption![2] Deciphering![3] Out put the secret key of encryption ![4] Out put the secret key of deciphering ![0] Exit!Input your option:3The secret key of encryption is (d,n): 29740852478398197564572634374977040809301849527519127810922350253211519188937220255581367656112180788 3883014467853719680755897, 46710578366223993588216768074358955056859439150138775950264146929742456780009062295759043078759124954 9255449025209916078286999Main menu:[1] Encryption![2] Deciphering![3] Out put the secret key of encryption ![4] Out put the secret key of deciphering ![0] Exit!Input your option:4The secret key of decipering is (e,n): 40825437198689634647000154444159646634567989591208159517672775135446974171678413938150731733157617416 416268925939128541181033, 46710578366223993588216768074358955056859439150138775950264146929742456780009062295759043078759124954 9255449025209916078286999Main menu:[1] Encryption![2] Deciphering![3] Out put the secret key of encryption ![4] Out put the secret key of deciphering ![0] Exit!Input your option:1Input a message:I am in Yunnan university!The ciphertext is c: 65892322566841409776195801550912782251822693109336285457691009427996593558805403245086465142278275028 052087684329306032745237Main menu:[1] Encryption![2] Deciphering![3] Out put the secret key of encryption ![4] Out put the secret key of deciphering ![0] Exit!Input your option:2Input the ciphertext:65892322566841409776195801550912782251822693109336285457691009427996593558805403245086465142278275028 052087684329306032745237message is I am in Yunnan university!Main menu:[1] Encryption![2] Deciphering![3] Out put the secret key of encryption ![4] Out put the secret key of deciphering ![0] Exit!Input your option:0注:绿色字体为输入内容(拷贝到word里后,经手动修改)。
非对称加密的应用原理简介非对称加密是一种密码学算法,通过使用一对密钥,分别为公钥和私钥,对数据进行加密和解密。
与对称加密算法相比,非对称加密算法更加安全,且在数字签名、安全传输、身份验证等领域有广泛应用。
应用原理非对称加密的应用原理主要包括以下几个方面:1. 公钥和私钥的生成非对称加密使用一对密钥,分别为公钥和私钥。
公钥是公开的,用于加密数据,私钥是保密的,用于解密数据。
这对密钥的生成通常依赖于数学算法,如RSA、Diffie-Hellman等。
在生成密钥对时,需要考虑密钥的长度和安全性。
2. 加密过程加密过程中,使用公钥对明文进行加密操作,生成密文。
只有私钥才能解密该密文,以得到原始的明文信息。
加密过程通常包括对数据的分组、填充、加密和输出等步骤。
3. 解密过程解密过程中,使用私钥对密文进行解密操作,得到原始的明文信息。
解密过程与加密过程相反,通常包括输入密文、解密、填充和输出等步骤。
4. 数字签名非对称加密算法广泛应用于数字签名领域。
数字签名可以用于验证数据的完整性、身份认证和防止数据篡改等。
数字签名过程中,使用私钥对数据进行签名,生成签名值。
其他人可以使用公钥来验证签名的有效性。
5. 安全传输非对称加密算法可以用于安全传输数据。
发送方使用公钥对数据进行加密,并将密文发送给接收方。
接收方使用私钥对密文进行解密,以获取原始数据。
该过程可以有效地防止数据被第三方窃取和篡改。
6. 身份验证非对称加密算法也可以用于身份验证。
用户可以使用私钥对数据进行加密,然后将加密后的数据发送给服务器进行验证。
服务器使用公钥对数据进行解密,以验证用户身份的合法性。
优势和局限性非对称加密具有以下优势: - 更高的安全性:相对于对称加密,非对称加密算法具有更高的安全性。
即使攻击者获得了公钥,也无法轻易地获取私钥。
- 方便密钥管理:非对称加密只需要管理秘密的私钥,而公钥可以公开使用。
- 数字签名和身份验证:非对称加密提供了数字签名和身份验证的功能,可以有效地确认数据的合法性和真实性。
⾮对称加密算法(RSA、DSA、ECC、DH)⾮对称加密算法 (RSA、DSA、ECC、DH)1.1 概念⾮对称加密需要两个密钥:公钥 (publickey) 和私钥 (privatekey)。
公钥和私钥是⼀对,如果⽤公钥对数据加密,那么只能⽤对应的私钥解密。
如果⽤私钥对数据加密,只能⽤对应的公钥进⾏解密。
因为加密和解密⽤的是不同的密钥,所以称为⾮对称加密。
⾮对称加密算法的保密性好,它消除了最终⽤户交换密钥的需要。
但是加解密速度要远远慢于对称加密,在某些极端情况下,甚⾄能⽐对称加密慢上1000倍。
1.2 特点算法强度复杂、安全性依赖于算法与密钥但是由于其算法复杂,⽽使得加密解密速度没有对称加密解密的速度快。
对称密码体制中只有⼀种密钥,并且是⾮公开的,如果要解密就得让对⽅知道密钥。
所以保证其安全性就是保证密钥的安全,⽽⾮对称密钥体制有两种密钥,其中⼀个是公开的,这样就可以不需要像对称密码那样传输对⽅的密钥了。
这样安全性就⼤了很多。
1.3 ⼯作原理(1) A 要向 B 发送信息,A 和 B 都要产⽣⼀对⽤于加密和解密的公钥和私钥。
(2) A 的私钥保密,A 的公钥告诉 B;B 的私钥保密,B 的公钥告诉 A。
(3) A 要给 B 发送信息时,A ⽤ B 的公钥加密信息,因为 A 知道 B 的公钥。
(4) A 将这个消息发给 B (已经⽤ B 的公钥加密消息)。
(5) B 收到这个消息后,B ⽤⾃⼰的私钥解密 A 的消息。
其他所有收到这个报⽂的⼈都⽆法解密,因为只有 B 才有 B 的私钥。
1.4 主要算法RSA、Elgamal、背包算法、Rabin、D-H、ECC (椭圆曲线加密算法)。
使⽤最⼴泛的是 RSA 算法,Elgamal 是另⼀种常⽤的⾮对称加密算法。
1.5 应⽤场景(1) 信息加密收信者是唯⼀能够解开加密信息的⼈,因此收信者⼿⾥的必须是私钥。
发信者⼿⾥的是公钥,其它⼈知道公钥没有关系,因为其它⼈发来的信息对收信者没有意义。
实验三 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。
Send to Kindle科学松鼠会RSA 算法原理(一)作者: 阮一峰如果你问我,哪一种算法最重要?我可能会回答"公钥加密算法"。
因为它是计算机通信安全的基石,保证了加密数据不会被破解。
你可以想象一下,信用卡交易被破解的后果。
进入正题之前,我先简单介绍一下,什么是"公钥加密算法"。
一、一点历史1976年以前,所有的加密方法都是同一种模式:(1)甲方选择某一种加密规则,对信息进行加密;(2)乙方使用同一种规则,对信息进行解密。
由于加密和解密使用同样规则(简称"密钥"),这被称为"对称加密算法"(Symmetric-key algorithm )。
这种加密模式有一个最大弱点:甲方必须把加密规则告诉乙方,否则无法解密。
保存和传递密钥,就成了最头疼的问题。
1976年,两位美国计算机学家Whitfield Diffie 和 Martin Hellman,提出了一种崭新构思,可以在不直接传递密钥的情况下,完成解密。
这被称为"Diffie-Hellman密钥交换算法"。
这个算法启发了其他科学家。
人们认识到,加密和解密可以使用不同的规则,只要这两种规则之间存在某种对应关系即可,这样就避免了直接传递密钥。
这种新的加密模式被称为"非对称加密算法"。
(1)乙方生成两把密钥(公钥和私钥)。
公钥是公开的,任何人都可以获得,私钥则是保密的。
(2)甲方获取乙方的公钥,然后用它对信息加密。
(3)乙方得到加密后的信息,用私钥解密。
如果公钥加密的信息只有私钥解得开,那么只要私钥不泄漏,通信就是安全的。
1977年,三位数学家Rivest、Shamir 和 Adleman 设计了一种算法,可以实现非对称加密。
这种算法用他们三个人的名字命名,叫做RSA算法。
从那时直到现在,RSA算法一直是最广为使用的"非对称加密算法"。
RSA密码算法的研究与改进摘要?S着计算机在全世界普及,网络技术已经进一步融入日常生产工作,成为了信息化时代交流和反馈的重要渠道。
所以,网络技术的不断发展带来了人们生活的便利化,但是计算机系统的安全保障在网络技术的发展下受到了更大的威胁,因此需要不断完善和发展信息保密技术。
本文着重探析RSA密码体制原理。
RSA算法是一种安全可靠的密码算法,一定程度上可以免疫绝大部分密码攻击手段。
人们通过不断改进和完善进一步提高了RSA密码算法的安全性。
但伴随先进技术的层出不穷以及网络科技的高速发展,RSA 密码体制也面临着更多挑战。
关键词RSA;欧几里德算法;大整数运算中图分类号TP3 文献标识码 A 文章编号2095-6363(2017)14-0089-02在信息技术高速发展的时代,海量的信息不再是确切存在的实物,而是由存在的实体通过计算机转换成了数字代码。
如果没有对这些数字代码采取适当的保密手段,很容易发生数字代码被人截获被破译者利用。
在计算机网络的发展过程中,人们在信息安全理论中引进了密码学理论,通过各种形式的加密以保证信息的可靠传输。
因此,计算机系统安全以及信息传输安全已经离不开密码学理论。
1 RSA传统算法概述2 RSA算法的分析与改进RSA算法的密钥中的e加密密钥是和互素的任何数字,由此我们可先行选取一个随机的大数,然后检验这个数是否和互素,如果不是互素,则再次循环这两个步骤,到与互素停止。
这里检验两个大数是否互素就需要考虑他们的最大公约数,自然而然就需要运用到求最大公约数的欧几里德法[1]。
欧几里德算法是按照辗转相除的思想计算两个正整数最大公约数的算法。
欧几里德算法的优点:综合上面的证明可知,求模运算计算得到余数r是最大公约数c的倍数,因为他们的倍数关系简化了最大公约数冗长繁复的计算。
与此同时,不需要进行试商这样的运算,只需要对余数进行相应的计算就可以直接得到最大公约数,极大地提高了运算的效率。
欧几里德算法的缺点:在大整数计算的时候欧几里德算法会出现很大的缺陷。
信息安全技术实验报告———非对称加密、解密算法RSA的C++实现计算机学院2008级12班学号:53081224姓名:胡守峰非对称加密、解密算法RSA的C++实现【我的目的】根据课上老师所讲“非对称加密、解密算法RSA”的有关知识,编写其的C++语言实现。
【我的加密思想】第一步,用户首先输入两个素数p和q,并求出n = p*q,然后再求出n的欧拉函数值phi。
第二步,在[e,phi]中选出一个与phi互素的整数e,并根据e*d ≡1(mod phi),求出e的乘法逆元。
至此我们已经得到了公开密钥{e,n}和秘密密钥{d,n}。
第三步,让用户输入要进行加密的小于n一组正整数(个数不超过MAXLENGTH=500),输入以-1为结束标志,实际个数存入size中,正整数以clear[MAXLENGTH]保存。
第四步,对第三步所得的明文clear[MAXLENGTH]进行加密。
遍历clear[size],对每一个整数用以下算法进行加密,并将加密后的密文保存在Ciphertext[MAXLENGTH]中。
注意:此处不能用m2[j] = clear[j] ^ e整数的幂,因为当e和clear[j]较大时,会发生溢出,至使出现无法预料的结果。
第五步,输出加密后的密文。
【我的解密思想】第一步,根据在以上算法中求出的解密密钥[d,phi],对加密后的密文Ciphertext[MAXLENGTH]进行解密,结果保存在DecryptionText[MAXLENGTH]中,算法如下:第二步,输出对加密前的明文和加密并解密后的密文进行比较,判断两个数组是否一致,从而得知算法是否正确。
【我的实验】1、RSA加密、解密算法的C++实现(可以在VC6.0上运行):#include<iostream>#include<cmath>using namespace std;#define MAXLENGTH 500 //明文最大长度,即所允许最大整数个数int size = 0;//保存要进行加密的正整数的个数int p, q; //两个大素数int n, phi; //n = p * q,phi = (p-1) * (q-1) 是n的欧拉函数值int e; //{e, n}为公开密钥int d; //{d, n}为秘密密钥int clear[MAXLENGTH], Ciphertext[MAXLENGTH];//分别用于存放加//密前的明//文和加密后的密文int DecryptionText[MAXLENGTH];//存放解密后的明文//////////////////////////////////////////////////////////////以下为加密算法void Encryption(){//加密算法cout << " 请输入两个较大的素数:" ;cin >> p >> q ;cout << " p = " << p << ", q = " << q << endl;n = p * q;//求解n,phi = (p - 1) * ( q - 1 );//求解n 的欧拉函数值cout << " n = " << n << ", phi = " << phi << endl;cout << " 请从[0," << phi - 1 << "]中选择一个与" << phi << " 互素的数e:";cin >> e;float d0;for( int i = 1; ; i++){///求解乘法逆元e * d ≡1 (mod phi)d0 = (float)(phi*i+1) / e;if( d0 - (int)d0 == 0 )break;}d = (int)d0;cout << endl;cout << " e = " << e << ", d = " << d << endl;cout << " 公开密钥Pk = {e,n} = {" << e << "," << n << "}" << endl;cout << " 秘密密钥Sk = {d,n} = {" << d << "," << n << "}" << endl;cout << endl;cout << " 请输入要加密的小于" << n << " 正整数(以-1结束):" << endl;cout << " 加密前的明文为:";for( i = 0; i < MAXLENGTH; i++)Ciphertext[i] = 1;int count;for(int j = 0; j<MAXLENGTH; j++){cin >> clear[j];if( clear[j] == -1 )break;count = e;while(count > 0){//对明文进行加密Ciphertext =(clear)^ e mod nCiphertext[j] = (Ciphertext[j] * clear[j]) % n;//加密算法count-- ;}}cout << " 密文为:" ;size = j;//实际密文长度for(int k=0; k<j; k ++)cout << Ciphertext[k] << " ";cout << endl ;}////////////////////////////////////////////////////////////////以下为解密算法void Decryption(){//解密算法for(int i = 0; i < MAXLENGTH; i++)DecryptionText[i] = 1;int count;for(int j = 0; j < size; j++){count = d;while(count > 0){//对密文进行解密DecryptionText =(Ciphertext)^ d (mod n)DecryptionText[j] = ((DecryptionText[j] * Ciphertext[j]) %n);count-- ;}}cout << " 解密后的明文为:";for( int k = 0; k < size; k ++)cout << DecryptionText[k] << " ";cout << endl ;cout << " 加密前的明文为:";for( k = 0; k < size; k++)cout << clear[k] << " ";cout << endl;}void main(){Encryption();char c;cout << endl;cout << "是否要解密(Y or N): ";cin >> c;if(c == 'y' || c == 'Y')Decryption();elsereturn ;}2、运行结果:①②③3、实验分析:①输入两个大素数p和q时,没有进行判断所输入的是不是素数②对phi求解e的乘法逆元时,必须保证e和phi互素,在这里我们也没有进行判断。
非对称密钥加密算法-RSA一.非对称密钥加密概述前面讲述了对称密钥加密体制。
使用对称密钥加密体制进行保密通信时,任意不同的两个用户之间都应该使用互不相同的密钥。
这样,如果一个网络中有n个用户,他们之间彼此可能需要进行秘密通信,这时网络中将共需要n(n-1)/2个密钥(其中,每个用户都需要保存n-1个密钥),这样巨大的密钥量给密钥分配和管理带来了极大的困难。
另外,随着计算机网络,特别是因特网的发展,网络上互不相识的用户可能需要进行保密的会话(例如,如果用户在进行电子商务活动时,需要保密的连接,这时的客户对象可能根本不是固定的对象)。
最后,对称密钥加密机制难以解决签名验证问题。
非对称密钥加密也称为公开密钥加密,或者叫做公钥加密算法。
使用公开密钥密码的每一个用户都分别拥有两个密钥:加密密钥和解密密钥,它们两者并不相同,并且由加密密钥得到解密密钥在计算机上是不可行的。
每一个用户的加密密钥都是公开的(因此,加密密钥也称为公开密钥)。
所有用户的公开密钥都将记录在作用类似于电话号码薄的密钥本上,而它可以被所有用户访问,这样每一个用户都可以得到其他所有用户的公开密钥。
同时,每一个用户的解密密钥将由用户保存并严格保密(因此,解密密钥也称为私有密钥)。
非对称密码算法解决了对称密码体制中密钥管理的难题,并提供了对信息发送人的身份进行验证的手段,是现代密码学最重要的发明。
公钥加密算法一般是将对密钥的求解转化为对数学上的困难问题的求解,例如RSA算法的安全性是建立在“大数分解和素性检测”这个数论难题的基础上,已知两个大素数a、b,求出a*b是容易计算的,而已知a*b,想知道其是哪两个大素数的乘积目前还没有好的计算方法,另外也有一些非对称加密算法(如ELGamal算法)的安全性是基于求“离散对数”这个数学难题上的。
在公钥密码系统中每个实体都有自己的公钥和相应的私钥。
公钥密码系统的加密变换和解密变换分别用E和D表示。
任何实体B要向实体A发送信息m的步骤如下:实体B首先获得实体A的真实公钥的拷贝(eA),实体B使用eA计算密文 c=E(m)并发送给实体A ,实体A使用自己的私钥dA,计算m=D(c)解密密文,恢复出明文m。
计算机安全常见的密码学算法与破解方法密码学算法是信息安全领域中的重要基础,它们被广泛应用于保护数据的机密性、完整性和可用性。
本文将就常见的密码学算法及其破解方法进行深入介绍。
一、对称加密算法对称加密算法主要特点是加解密使用同一个密钥,且加密解密速度较快。
常见的对称加密算法包括DES、AES和RC4等。
1. DES算法DES(Data Encryption Standard)是一种经典的对称加密算法,密钥长度为56位。
然而,由于DES密钥长度较短,已经容易被暴力破解。
采用现代计算能力,可以通过穷举法破解DES加密。
2. AES算法AES(Advanced Encryption Standard)是一种高级的对称加密算法,用于替代DES。
AES支持128位、192位和256位密钥长度,安全性较高,难以被暴力破解。
目前尚未发现有效的破解AES算法的方法。
3. RC4算法RC4是一种流密码算法,常用于无线网络等领域。
RC4算法具有简单高效的特点,但在一些特定情况下,如密钥重用等,可能会导致安全性问题。
由于其算法的弱点被发现,RC4算法已经不再被广泛使用。
二、非对称加密算法非对称加密算法使用一对密钥:公钥与私钥。
加密使用公钥,解密使用私钥。
RSA和ECC是常见的非对称加密算法。
1. RSA算法RSA算法基于大整数的因子分解难题,所以安全性取决于因数分解问题的难度。
目前最常用的RSA密钥长度为2048位或更长,破解RSA算法的最佳方法是通过对大整数进行因子分解。
由于目前因子分解仍然是一个计算量巨大的问题,RSA算法仍然被广泛应用。
2. ECC算法ECC(Elliptic Curve Cryptography)算法基于椭圆曲线离散对数问题,它提供了与RSA相当的安全性,但使用更短的密钥长度。
因此,ECC算法在资源受限的设备上具有较大优势。
目前为止,ECC算法尚未被有效攻破。
三、哈希函数与消息认证代码算法哈希函数与消息认证代码(MAC)算法是密码学中常用的保证数据完整性的方法。
北京林业大学2014 学年—2015 学年第2 学期计算机网络安全实验任务书专业:计算机科学与技术班级:_计算机班______姓名:学号:__________实验地点:N901 任课教师:实验题目:Simple-RSA算法实验环境:Windows 操作系统,VC开发环境,C/C++语言实验要求:阅读RSA算法,巩固对RSA公钥加解密算法原理的理解。
学习和掌握生成质数的一般性方法,用于产生RSA算法秘钥。
1.编程计算所有小于200的质数,输出文件到primer.txt。
2.编程实现大整数指数求余的函数Power_Mod(B,i,n)=B i mod n。
3.选择p为小于100的最大质数、q为大于100的最小质数,计算RSA算法的公钥(e,n)和私钥(d,n)。
4.基于公钥(e,n)和私钥(d,n),以及Power_Mod计算明文M=52的密文C,并计算密文C的明文M,验证算法的正确性。
05.尝试一个更大的M(但不要超过n),计算密文C;利用解密公式反求解M,体会计算过程与结果的差异。
实验内容:1.算法简介RSA公钥加密算法是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。
当时他们三人都在麻省理工学院工作。
RSA就是他们三人姓氏开头字母拼在一起组成的。
RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的绝大多数密码攻击,已被ISO推荐为公钥数据加密标准。
今天只有短的RSA钥匙才可能被强力方式解破。
到2008年为止,世界上还没有任何可靠的攻击RSA算法的方式。
只要其钥匙的长度足够长,用RSA加密的信息实际上是不能被解破的。
但在分布式计算和量子计算机理论日趋成熟的今天,RSA加密安全性受到了挑战。
RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但是想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。
摘要系统实现了对身份信息的加密、解密、签名认证以及公私密钥对产生器等相关功能,对身份信息的的加解密采用的是RSA加密算法,可直接呈现加密后的RSA结果,为了确保会话密钥的安全,也是通过使用非对称加密算法RSA算法为会话密钥加密.目录摘要 (I)绪论 (2)(一)课题来源 (2)(二)研究意义 (2)一、数据安全的研究方向 (2)(二)身份信息的加密、解密 (2)二身份信息加解密及验证系统方案及实现 (4)(一)文件的加密 (4)(二)文件的解密及传输验证的正确性 (4)(三)公私密钥对 (5)绪论(一)课题来源计算机技术的不断发展,Internet的普及,网络化的信息逐渐被人们所接受,传统的传递信息的方式法神关了巨大的变化,也逐渐改变了人们的生活。
目前互联网发展日益迅速,人们越来越多地使用互联网传递各种消息资料,而利用互联网进行文件的传输是人们进行信息交流的必要手段,然而文件在传输过程中容易受到截获、嗅探和篡改等攻击,也日益成为困扰人们使用互联网传递文件的阻碍。
同时信息的保密性也越来越受到威胁,如何提高身份信息的保密性及身份信息传输过程变得更安全可靠就是一个急需解决的问题,尤其是在政务系统的应用中,安全性则成为的重中之重的问题,安全问题的解决是良好办公系统环境的先决条件。
(二)研究意义通过国家计算机网络应急技术处理协调中心统计显示,我国政府网络被黑客入侵逐年递增,维护好电子政务系统的安全、办公过程中信息传递的安全,防止被一些怀有不良居心的人抄袭或破坏,因此就需要安全措施来保护相应的信息及数据不被窃取或篡改,而采取对数据直接解密的方式即方便又安全,是保护信息安全的有效手段。
本研究课题,完成相应的系统,用户间可进行安全的文件、图片的收发。
所有的交互身份信息都经过加密和签名处理,通过验证签名机制可验证是否被恶意篡改,传输者将明文进行加密后的密文进行存储和传输,授权的接收者用本系统进行解密恢复明文,而未经授权的截获者将无法对明文可见,从而保证了身份信息的安全性。
RSA算法简介概述RSA公钥加密算法是1977年由Ron Rivest、Adi Shamirh和LenAdleman在(美国麻省理工学院)开发的。
RSA取名来自开发他们三者的名字。
RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的所有密码攻击,已被ISO推荐为公钥数据加密标准。
RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。
什么是RSARSA公开密钥密码体制。
所谓的公开密钥密码体制就是使用不同的加密密钥与解密密钥,是一种“由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制。
在公开密钥密码体制中,加密密钥(即公开密钥)PK是公开信息,而解密密钥(即秘密密钥)SK 是需要保密的。
加密算法E和解密算法D也都是公开的。
虽然秘密密钥SK是由公开密钥PK决定的,但却不能根据PK计算出SK。
正是基于这种理论,1978年出现了著名的RSA 算法,它通常是先生成一对RSA 密钥,其中之一是保密密钥,由用户保存;另一个为公开密钥,可对外公开,甚至可在网络服务器中注册。
为提高保密强度,RSA密钥至少为500位长,一般推荐使用1024位。
这就使加密的计算量很大。
为减少计算量,在传送信息时,常采用传统加密方法与公开密钥加密方法相结合的方式,即信息采用改进的DES或IDEA 对话密钥加密,然后使用RSA密钥加密对话密钥和信息摘要。
对方收到信息后,用不同的密钥解密并可核对信息摘要。
RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作。
RSA是被研究得最广泛的公钥算法,从提出到现在的三十多年里,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一。
RSA深入解释此,模数n 必须选大一些,因具体适用情况而定。
RSA的速度由于进行的都是大数计算,使得RSA最快的情况也比DES慢上好几倍,无论是软件还是硬件实现。
实验二非对称密码算法RSA一、实验目的通过实际编程了解非对称密码算法RSA的加密和解密过程,加深对非对称密码算法的认识。
二、实验环境运行Windows或Linux操作系统的PC机,具有gcc(Linux)、VC(Windows)等C语言编译环境。
三、实验内容和步骤1)编写一个程序,随机选择3个较大的数x、e、n,然后计算xe mod n,记录程序运行时间。
实际中应用的素数为512位,n也就为1024位。
这样的大数在计算机上如何表示、如何进行运算,查阅资料给出简单说明。
RSA依赖大数运算,目前主流RSA算法都建立在512位到1024位的大数运算之上,所以我们在现阶段首先需要掌握1024位的大数运算原理。
大多数的编译器只能支持到64位的整数运算,即我们在运算中所使用的整数必须小于等于64位,即:0xffffffffffffffff也就是,这远远达不到RSA 的需要,于是需要专门建立大数运算库来解决这一问题。
最简单的办法是将大数当作字符串进行处理,也就是将大数用10进制字符数组进行表示,然后模拟人们手工进行“竖式计算”的过程编写其加减乘除函数。
但是这样做效率很低,因为1024位的大数其10进制数字个数就有数百个,对于任何一种运算,都需要在两个有数百个元素的数组空间上做多重循环,还需要许多额外的空间存放计算的进位退位标志及中间结果。
当然其优点是算法符合人们的日常习惯,易于理解。
另一种思路是将大数当作一个二进制流进行处理,使用各种移位和逻辑操作来进行加减乘除运算,但是这样做代码设计非常复杂,可读性很低,难以理解也难以调试。
(2)计算机在生成一个随机数时,并不一定就是素数,因此要进行素性检测。
是否有确定的方法判定一个大数是素数,要查阅资料,找出目前实际可行的素数判定法则,并且比较各自的优缺点。
所谓素数,是指除了能被1和它本身整除而不能被其他任何数整除的数。
根据素数的定义,只需用2到N-1去除N,如果都除不尽则N是素数,结束知其循环。
网络安全技术rsa例题RSA加密算法是一种非对称加密算法,它基于大数的因式分解难题。
其加密过程如下:1. 选择两个不同的质数p和q,计算N=p*q;2. 计算φ(N),其中φ(N)=(p-1)*(q-1);3. 选择一个整数e,使得1<e<φ(N)且e与φ(N)互质;4. 计算e的模反元素d,即满足(d*e)mod(φ(N))=1的整数d;5. 公钥为(N, e),私钥为(N, d);6. 加密明文M,密文C=M^e(mod N);7. 解密密文C,明文M=C^d(mod N);下面通过一个例题来说明RSA加密算法的具体操作步骤。
假设两个质数p=11,q=19,计算N=p*q=11*19=209,计算φ(N)=(p-1)*(q-1)=10*18=180。
选择e=7,计算e的模反元素d=103。
明文为M=53,利用公钥(N, e)=(209, 7)加密明文得到密文C。
计算C=M^e(mod N)=53^7(mod 209)=180922727(mod 209)=32。
将密文C=32,利用私钥(N, d)=(209, 103)解密得到明文M。
计算M=C^d(mod N)=32^103(mod 209)=53。
因此,通过RSA加密算法,利用公钥对明文进行加密得到密文,然后利用私钥对密文进行解密得到原始明文。
只有掌握私钥的人才能对密文进行解密,确保了通信的安全性。
需要注意的是,RSA加密算法的安全性取决于质因数分解的难度。
当质数p和q足够大并且保密时,即使知道了N和e,也很难通过计算来找到d来破解密文。
因此,在实际应用中,选择足够大的质数和合适数进行RSA加密,可以有效保护通信内容的安全。
实验二非对称密码算法RSA一、实验目的通过实际编程了解非对称密码算法RSA的加密和解密过程,加深对非对称密码算法的认识。
二、实验环境运行Windows或Linux操作系统的PC机,具有gcc(Linux)、VC(Windows)等C语言编译环境。
三、实验内容和步骤1)编写一个程序,随机选择3个较大的数x、e、n,然后计算xe mod n,记录程序运行时间。
实际中应用的素数为512位,n也就为1024位。
这样的大数在计算机上如何表示、如何进行运算,查阅资料给出简单说明。
RSA依赖大数运算,目前主流RSA算法都建立在512位到1024位的大数运算之上,所以我们在现阶段首先需要掌握1024位的大数运算原理。
大多数的编译器只能支持到64位的整数运算,即我们在运算中所使用的整数必须小于等于64位,即:0xffffffffffffffff也就是18446744073709551615,这远远达不到RSA的需要,于是需要专门建立大数运算库来解决这一问题。
最简单的办法是将大数当作字符串进行处理,也就是将大数用10进制字符数组进行表示,然后模拟人们手工进行“竖式计算”的过程编写其加减乘除函数。
但是这样做效率很低,因为1024位的大数其10进制数字个数就有数百个,对于任何一种运算,都需要在两个有数百个元素的数组空间上做多重循环,还需要许多额外的空间存放计算的进位退位标志及中间结果。
当然其优点是算法符合人们的日常习惯,易于理解。
另一种思路是将大数当作一个二进制流进行处理,使用各种移位和逻辑操作来进行加减乘除运算,但是这样做代码设计非常复杂,可读性很低,难以理解也难以调试。
(2)计算机在生成一个随机数时,并不一定就是素数,因此要进行素性检测。
是否有确定的方法判定一个大数是素数,要查阅资料,找出目前实际可行的素数判定法则,并且比较各自的优缺点。
所谓素数,是指除了能被1和它本身整除而不能被其他任何数整除的数。
根据素数的定义,只需用2到N-1去除N,如果都除不尽则N是素数,结束知其循环。
由此得算法1。
(1)flay=0,i=2. /*flay为标志,其初值为0,只要有一个数除尽,其值变为1.(2)If n mod i=0 then flay=l else i=i+1/* n mod i是n除以i的余数.(3)If flay=0 and I<=n-1 then(2) else go (4)(4)If flay=0 then write“n是素数。
”else write“不是素数”最坏的情形下,即N是素数时,算法1需要执行N-2次除法,时间复杂性太大。
假设N桶分解成iXj(i,j是小于N的整数),则必存在一个因子(1<=i<=int(√n)),这样只需用2到int(√n)去除N即可,于是循环次数可以大减小,由此得出算法2算法2(改进算法)(1)flag=0,i=2(2)if n mod i then flag=1else i=i+1(3)if flag=0 and i<=int(√n) then go(2) else go(4)(4)if flah=0 then write”n是素数”else write “n不是素数“。
最坏的情形下,即当N是纱数时1需要执行int(√n)-1次除法。
虽然算法2比算法1确是快了不小,但有重复计算,如果用2去除N时若不尽则用2的倍数去除N也除不尽,于是只要2除不尽,2的倍数就不用去除,这样可以减少除法次数,由此得出算法3(1)for(i=2;int(√n);i++)mark[i]=0/*mark是标记其初值为0,只要它的因子除不尽其值变为1。
(2)i=2,flag=0(3)while(flag=0and i<=int(√n){If mark[i]=0Then{ If n mod i=0Then flag=1ElseS=i+iWhile s<int(√n){Mark[s]=1S=s+i}}}i=i+1}(4)if flag=0 then write”n是素数。
Else write “N不是素数。
“该算法迭代重复次数仍为int(√n)次,但是筛法算法在执行过程中,每次都筛去许多数,使下一次迭代时不用再除法而只做比较,比较比除法运算要简单得多,因此实际执行速度比算法1,算法2要得多。
当然,对于素数的判定还有别的方法,如用概率算法求素数,但其理论太难,一般情况下很少用。
关于素数的判定问题还有待发现简单更高效的方法。
(3)附件中给出了一个密码算法库,其中包括各种对称加密算法、非对称加密算法、Hash算法和数字签名算法。
找出其中关于RSA算法的部分,并且基于标准输入输出写一段用RSA加密文件的程序。
程序代码:#include<iostream>#include "mycrypt.h"using namespace std;int main(void){int err, hash_idx, prng_idx, res;unsigned long l1,l2;unsigned char pt2[128],out[1024];rsa_key key;/* register prng/Hash */if (register_prng(&sprng_desc) ==-1) { printf("Error registering sprng");return EXIT_FAILURE;}if (register_hash(&sha1_desc) ==-1) { printf("Error registering sha1");return EXIT_FAILURE;}hash_idx = find_hash("sha1");prng_idx = find_prng("sprng");/* make an RSA-1024 key */if ((err = rsa_make_key(NULL, /* PRNG state */ prng_idx,/* PRNG idx */1024/8, /* 1024-bit key */65537,/* we like e=65537 */&key)/* where to store the key */) != CRYPT_OK) {printf("rsa_make_key %s", error_to_string(err));return EXIT_FAILURE;}FILE *fd1;FILE *fd2;FILE *fd3;fd1=fopen("plaintext1.txt","rb");fd2=fopen("cipertext.txt","wb");int count=0;unsigned char p_buf[16];unsigned char tt[]="TestApp";l1 = sizeof(out);while(true){count=fread(p_buf,sizeof(unsigned char),16,fd1);for(int j=0;j<count;j++)cout<<p_buf[j];if ((err = rsa_encrypt_key(p_buf,/* data we wish to encrypt */ count,/* data is 16 bytes long */out, /* where to store ciphertext */&l1, /* length of ciphertext */tt,/* our lparam for this program */7,/* lparam is 7 bytes long */NULL,/* PRNG state */prng_idx,/* ping idx */hash_idx,/* Hash idx */&key)/* our RSA key */) != CRYPT_OK) {printf("rsa_encrypt_key %s", error_to_string(err));return EXIT_FAILURE;}fwrite(out,sizeof(unsigned char),l1,fd2);if(count<16)break;count=0;}fclose(fd1);fclose(fd2);fd2=fopen("cipertext.txt","rb");fd3=fopen("plaintext2.txt","wb");unsigned char c_buf[128];long l3=sizeof(c_buf);while(true){count=fread(c_buf,sizeof(unsigned char),128,fd2);if(count==0)break;l2=sizeof(pt2);if((err=rsa_decrypt_key(c_buf,/*encrypted data*/ l3,/*length of ciphertext*/pt2,/*where to put plaintext*/&l2,/*plaintext length*/tt,/*lparam for this program*/7,/*lparam is 7 bytes long*/NULL,/*PRNG state*/prng_idx,/*prng idx*/hash_idx,/*hash idx*/&res,/*validity of data*/&key)/*our RSA key*/) != CRYPT_OK){printf("err=rsa_decrypt_key %s",error_to_string(err));return EXIT_FAILURE;}for(int k=0;k<l2;k++)cout<<pt2[k];fwrite(pt2,sizeof(unsigned char),l2,fd3);count=0;}fclose(fd2);fclose(fd3);return 0;}程序执行结果如下:加密前的明文为:加密后的密文为:心得体会对非对称密码算法RSA的理解加深了,会运用一些现成的算法进行编程,对一些比较复杂的算法开始基本认识并深刻的掌握。