计算机网络安全实验报告--非对称密码算法RSA
RSA公钥密码算法

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算法是非对称加密算法中最有名的一种。
它以三位数乘法为基础,可以用于数据加密和数字签名。
现代密码算法实验报告(3篇)

第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)输出加密后的密文。
近代密码学---IT实验01--RSA实现

云南大学数学与统计学实验教学中心实验报告课程名称:近代密码学年级: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非对称加密算法实验报告

2009年9月
第一部分
信息加密技术实验
第一部分 信息加密技术实验
一、实验目的:
在数据加密、解密的算法中,DES算法是典型的单密钥体制,RSA是典型的双密 钥体制, 目前均在大量使用。 通过实验, 让学生充分理解和掌握DES和RSA算法,PGP 加密工具的使用。以及通过网络进行数据加密传输的概念。
RSA实验: 运行《RSATool》演示软件: 产生公钥和私钥
第二项任务 DES加密解密工具2.1及其代码——支持字符串及文件加密,支持3重DES
1.DES 2.1 说明
先看看DES 2.1 的截图:
的简介: 2. DES 2.1 2.1的简介:
1.支持任意长度字符串加密解密 2.明文、密钥可以不足8字节 3.支持回车换行,Tab 等特殊字符 4.密文可以选择三种方式显示 5.支持3重DES 6.支持文件加密、解密 7.加密时显示进度
3.DES 算法介绍
关于DES算法的介绍大家可以看我博客里的另一篇文章,[原创]DES算法的介绍以及实
现(含上次DES程序1.0的 源 码 ) ,所以在此不在重述。
提供的 Public 函数 4. yxyDES2 Class Class提供的 提供的Public Public函数
下面我们来看看yxyDES2 类(Class)里public函数和它们的用法: //功能:产生16个28位的key //参数:源8位的字符串(key),存放key的序号0-1 //结果:函数将调用private CreateSubKey将结果存于char SubKeys[keyN][16][48] void InitializeKey(char* srcBytes,unsigned int keyN); //功能:加密8位字符串 //参数:8位字符串,使用Key的序号0-1 //结果:函数将加密后结果存放于private szCiphertext[16] // 用户通过属性Ciphertext得到 void EncryptData(char* _srcBytes,unsigned int keyN); //功能:解密16位十六进制字符串 //参数:16位十六进制字符串,使用Key的序号0-1 //结果:函数将解密候结果存放于private szPlaintext[8] // 用户通过属性Plaintext得到 void DecryptData(char* _srcBytes,unsigned int keyN); //功能:加密任意长度字符串 //参数:任意长度字符串,长度,使用Key的序号0-1 //结果:函数将加密后结果存放于private szFCiphertextAnyLength[8192] // 用户通过属性CiphertextAnyLength 得到 void EncryptAnyLength(char* _srcBytes,unsigned int _bytesLength,unsigned int keyN); //功能:解密任意长度十六进制字符串 //参数:任意长度字符串,长度,使用Key的序号0-1 //结果:函数将加密后结果存放于private szFPlaintextAnyLength[8192] // 用户通过属性PlaintextAnyLength 得到 void DecryptAnyLength(char* _srcBytes,unsigned int _bytesLength, unsigned int keyN); //功能:Bytes到Bits的转换, //参数:待变换字符串,处理后结果存放缓冲区指针,Bits缓冲区大小 void Bytes2Bits(char *srcBytes, char* dstBits, unsigned int sizeBits); //功能:Bits到Bytes的转换, //参数:待变换字符串,处理后结果存放缓冲区指针,Bits缓冲区大小 void Bits2Bytes(char *dstBytes, char* srcBits, unsigned int sizeBits);
非对称加密算法(RSA、DSA、ECC、DH)

⾮对称加密算法(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算法

实验三 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。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验二非对称密码算法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的理解加深了,会运用一些现成的算法进行编程,对一些比较复杂的算法开始基本认识并深刻的掌握。