篇一 :RSA算法实验报告

实验二非对称密码算法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)对组成。

       实例:根据已知参数:p=3,q=11,M=2,计算公私钥,并对明文进行加密,然后对密文进行解密。

       由题意知:n = p * q=33,z =(p-1)*(q-1)=20,选d=7,

计算得e=3,所以

C=M^e(mod n)=8

M=C^d(mod n)=2

       2、RSA算法与DES算法的比较:

       运行附件的RSATool,输入一大段文字,记录运行时间。再使用DES算法加密相同的文字,记录运行时间,对比这两个时间发现,RSA算法比DES算法慢很多,因为RSA算法进行的是大数运算,所以程序运行的速度比DES慢很多。因此RSA算法只适合于少量数据加密,不适合于大量数据加密。

…… …… 余下全文

篇二 :RSA加密算法实验报告

四 川 大 学 计 算 机 学 院

实   验   报   告

学号:           姓名:        班级:  班           第        周试验

…… …… 余下全文

篇三 :RSA算法的实现实验报告

RSA算法的实现

一、实验目的

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;

}

void main()

{

int p,q,e,d,m,n,t,c,r;

char s;

printf("please input the p,q: ");

scanf("%d%d",&p,&q);

n=p*q;

printf("the n is %3d\n",n);

t=(p-1)*(q-1);

printf("the t is %3d\n",t);

printf("please input the e: ");

scanf("%d",&e);

…… …… 余下全文

篇四 :计算机网络安全实验报告--非对称密码算法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。

…… …… 余下全文

篇五 :RSA算法实验报告

     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)

解密时,对每一密文c计算明文

                               mΞcd(modn)

2、主要函数说明

(1)判断一个数是否为素数函数

bool prime(int n) 

{

              int m=sqrt(n);

…… …… 余下全文

篇六 :RSA算法实验报告

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互质。

4)、在选取衣阁数d,满足de=1 mod∮(n)(表示de除以∮(n)的余数为1,或者说d是e在摸∮(n)下的乘法逆元,因e与∮(n)互质,由模运算可知,它的乘法逆元一定存在)。

5)、以PK={e,n}为公钥,SK={d,n}为私钥。

(2)、加密

加密时首选将明文M比特串分组,使得每个

2

分组对应的十进制数小于n,即分组的长度小于log2N。然后对每组明文分组,做加密运算:c=me mod n。

(3)、解密

对密文分组的解密运算为m=c d mod n。 下面证明RSA算法中解密过程的正确性。 由加密过程c=m e mod n,所以 c d mod n=m ed mod n=m 1 mod∮(n)mod n=m k∮(n)+1 mod n。

…… …… 余下全文

篇七 :RSA算法实验报告

实验目的

验证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;

cout<<"Prime number q=";q.display();cout<<endl;

LargeNumber n,phi;

n.mul(p,q); //n=pq

cout<<"Mod n=";n.display();cout<<endl;

phi.mul(p_1,q_1); //phi=(p-1)(q-1)

cout<<"The secret phi=";phi.display();cout<<endl;

…… …… 余下全文

篇八 :RSA算法实验报告

计算网络安全实验报告

—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。

HugeInt Power( const HugeInt & x, const HugeInt & n, const HugeInt & p )

{

if( n == 0 )

return 1;

HugeInt tmp = Power( ( x * x ) % p, n / 2, p );

if( n % 2 != 0 )

tmp = ( tmp * x ) % p;

return tmp;

}

(5)d是程序自留且保密的,用于解密密钥

(6)由于对字符加密较复杂,所以只考虑对单个数字加密。

三、详细代码

#include <iostream>

…… …… 余下全文