实验二非对称密码算法RSA
一、实验目的
通过实际编程了解非对称密码算法RSA的加密和解密过程,加深对非对称密码算法的认识。
二、实验环境
运行Windows或Linux操作系统的PC机,具有JDK1.6版本的Java语言编译环境。
三、实验内容和步骤
1. 对RSA算法的理解
RSA算法(公开密钥算法)的原理:
(1). 选择两个大的素数p和q(典型情况下为1024位)
(2). 计算n = p * q 和 z =(p-1)*(q-1).
(3). 选择一个与z互素的数,将它称为d
(4). 找到e,使其满足e*d = 1 mod z
提前计算出这些参数以后,我们就可以开始执行加密了。首先将明文分成块,使得每个明文消息P落在间隔0*P<n中。为了做到这一点,只要将明文划分成k位的块即可,这里k是满足2^k<n的最大整数。
为了加密一个消息P,只要计算C=P^e(mod n) 即可。为了解密C,只要计算P=C^d(mod n)即可。可以证明,对于指定范围内的所有P,加密盒解密互为反函数。为了执行加密,你需要e和n;为了执行解密,你需要d和n。因此,公钥是有(e,n)对组成,而私钥是有(d,n)对组成。
…… …… 余下全文
1. 熟悉公钥密码体制;
2.掌握产生密钥对的程序设计方法;
3.掌握产生加密/解密的程序设计方法。
二、实验内容和要求
1.进行RSA加密/解密算法的设计;
2.对RSA程序进行编译和调试;
3.使用编写的程序进行加密和解密。
三、实验环境
运行Windows操作系统的PC机,可以利用具有VC++语言环境;如果所运用的语言是JAVA,那么也可以利用JAVA语言环境来实现RSA算法的加密和解密。
四、实验步骤
1.采用C++语言进行本次实验的编写,实验的代码如下:
#include <stdio.h>
#include<conio.h>
int candp(int a,int b,int c)
{ int r=1;
b=b+1;
while(b!=1)
{
r=r*a;
r=r%c;
b--;
}
printf("%d\n",r);
return r;
…… …… 余下全文
实验二非对称密码算法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进制数字个数就有数百个,对于任何一种运算,都需要在两个有数百个元素的数组空间上做多重循环,还需要许多额外的空间存放计算的进位退位标志及中间结果。当然其优点是算法符合人们的日常习惯,易于理解。
…… …… 余下全文
RSA算法的实现
一、实验目的
1、理解公钥密码体制基本原理。
2、理解并能够编写RSA算法。
3、熟练应用C++编程实现算法。
利用C++编程实现RSA算法密码体制,算法描述参考课本P191-204。
1、算法原理
步骤如下(这里设B为是实现着)
(1)B寻找出两个大素数p和q。
(2)B计算出n=p*q和(n)=)(p-1)*(q-1)。
(3)B选择一个随机数e(0<e<(n)),满足(e,(n))=1 (即e与欧拉函数互素(n))。
(4)B使用欧几里得算法计算e的模余(n)的乘法逆元素d。
(5)B在目录中公开n和e作为他的公开密钥,保密p、q和d。
加密时,对每一明文m计算密文
cΞme(modn)
…… …… 余下全文
RSA算法实验报告
实验名称:RSA算法 班级:2012级网络工程 姓名:魏彦博
学好:20121070135 指导老师:赵文波
实验日期:20xx年10月10日
1、 RSA的简介
19xx年由麻省理工学院的Ronald L.Rivest、以色列魏茨曼科学中心的Adi Shamir 发表了著名的论文《A Method Obtaining Digital Signature and Public-Key Cryptosystems》(《获得数字签名和公开密钥密码系统的一种方法》),并提出了
1
一种用数论够造的、也是迄今为止理论上最为成熟完善的公钥密码技术——RSA,该技术已得到广泛应用。
2、 RSA的基本原理
RSA 是基于这样一个十分简单的数论事实而设计的:将两个大的素数想乘十分容易,但想分解它们是十分困难的,因此可将乘积公开作为加密密钥。
3、 RSA算法的描述
(1)、密钥的产生
1)、选两个保密的大素数P和q。
2)、计算n=pq,∮(n)=(p-1)(q-1),其中∮(n)是n的欧拉函数值。
3)、选一整数e,满足1<e<∮(n),且gcd(∮(n),e)=1,即∮(n)与e互质。
…… …… 余下全文
实验目的
验证RSA算法的加密、解密计算过程和效果
#include <iostream>
#include "LargeNumber.h"
using namespace std;
void Euclid(LargeNumber &ek, LargeNumber &phi, LargeNumber &b2);
void Power(LargeNumber &base, LargeNumber &exponent, LargeNumber &n, LargeNumber &result);
void main()
{
LargeNumber one(1);
LargeNumber p(2,0xfaef,0x8081),q(2,0xfb88,0x1715);
LargeNumber p_1,q_1;
p_1.sub(p,one); //p_1=p-1
q_1.sub(q,one); //q_1=q-1
cout<<"Prime number p=";p.display();cout<<endl;
…… …… 余下全文
计算网络安全实验报告
—RSA加密算法
学院:计算机科学与技术学院 班级: 软件外包111
姓名: 万 鹏
学号: 1113122020
一、实验目的:
通过实际编程了解非对称密码算法RSA的加密和解密过程,加深对非对称密码算法的认识。
二、实验环境:
运行Windows或Linux操作系统的PC机,具有gcc(Linux)、VC(Windows)等C语言编译环境。
三、实验内容与实验步骤:
(1)建立一个模板类HugeInt,在类里建函数Power、FullGcd、inverse。
(2)计算机在生成一个随机数时,并不一定就是素数,因此要进行素性检测。是否有确定的方法判定一个大数是素数,要查阅资料,找出目前实际可行的素数判定法则,并且比较各自的优缺点。
(3)所谓素数,是指除了能被1和它本身整除而不能被其他任何数整除的数。根据素数的定义,只需用2到N-1去除N,如果都除不尽则N是素数,结束知其循环。由此得算法1。
(4)要求x^n mod p,设立一个tmp值,当n为零时返回1,当n为奇数时tmp=(tmp*x)%p,再将tmp的值返回函数Power。
…… …… 余下全文