搜档网
当前位置:搜档网 › rsa算法对字符串的加密解密

rsa算法对字符串的加密解密

rsa算法对字符串的加密解密
rsa算法对字符串的加密解密

#include

#include

/*类型定义*/

typedef long int li_ELEMTYPE;

typedef int i_ELEMTYPE;

typedef char c_ELEMTYPE;

/*宏定义*/

#define TEXT_MAX_NUM 20

#define RSA_ENCODE_TEXT "xidianuniversity"

/*RSA编解码函数*/

/*

输入输出说明:r = a^b mod c

编码1.a-------原始加密明文数据

2.b-------加密指数(p-1)(q-1)

3.c-------p*q

4.r-------加密后密文数据

解码1.a-------原始解密密文数据

2.b-------解密指数d

3.c-------p*q

4.r-------解密后明文数据

*/

li_ELEMTYPE Rsa_un_enCode(li_ELEMTYPE a,li_ELEMTYPE b,li_ELEMTYPE c) {

li_ELEMTYPE r = 1;

b = b + 1;

while(b != 1)

{

r = r * a;

r = r % c;

b--;

}

return r;

}

/*main主函数*/

int main(int argc, char **argv)

{

li_ELEMTYPE p,q,e,d,n,t;

i_ELEMTYPE i = 0;

i_ELEMTYPE acSecret_Text[TEXT_MAX_NUM];

c_ELEMTYPE acPublic_Text[TEXT_MAX_NUM];

memset(acSecret_Text, 0, sizeof(acSecret_Text));

memset(acPublic_Text, 0, sizeof(acPublic_Text));

memcpy(acPublic_Text, RSA_ENCODE_TEXT, sizeof(acPublic_Text));

p = 53;

q = 79;

e = 77777;

printf("Info: p = %ld q = %d e = %d\n",p,q,e);

n=p*q;

printf("\nThe n(p*q) = %3d\n",n);

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

printf("\nThe t((p-1)*(q-1)) = %ld\n",t);

printf("\nCaculating d \n>>…………\n");

d = 1;

while(((e * d) % t) != 1)

{

d++;

}

printf("The d = %ld\n",d);

printf("\n--------------Encoding--------------\n");

printf("The acSecret_Text is:\n");

for(i = 0; i < TEXT_MAX_NUM && acPublic_Text[i] != 0; i++)

{

acSecret_Text[i] = Rsa_un_enCode(acPublic_Text[i],e,n);

printf("%d ",acSecret_Text[i]);

}

printf("\n");

printf("\n--------------Decoding--------------\n");

printf("The acPublic_Text is:\n");

for(i = 0; i < TEXT_MAX_NUM && acPublic_Text[i] != 0; i++)

{

acPublic_Text[i] = (c_ELEMTYPE)Rsa_un_enCode(acSecret_Text[i],d,n);

printf("%c",acPublic_Text[i]);

}

printf("\n");

return 0;

}

RSA加密解密的设计与实现

RSA加密解密的设计与实现

上海电力学院 《应用密码学》课程设计 题目: RSA加密解密的设计与实现 院系:计算机科学与技术学院 专业年级:级 学生姓名:李正熹学号: 3273 指导教师:田秀霞 1月 8日 目录

目录 1.设计要求 2.开发环境与工具 3.设计原理(算法工作原理) 4.系统功能描述与软件模块划分 5.设计核心代码 6.参考文献 7. 设计结果及验证 8. 软件使用说明 9. 设计体会 附录 1.设计要求

1 随机搜索大素数,随机生成公钥和私钥 2 用公钥对任意长度的明文加密 3 用私钥对密文解密 4 界面简洁、交互操作性强 2.开发环境与工具 Windows XP操作系统 Microsoft Visual C++ 6.0 1.创立rsa工程

2.在rsa工程中创立 3273 李正熹cpp文件 3.设计原理 RSA算法简介 公开密码算法与其它密码学完全不同,它是基于数学函数而不是基于替换或置换。与使用一个密钥的对称算法不同,公开密钥算法是非对称的,而且它使用的是两个密钥,包括用于加密的公钥和用于解密的私钥。公开密钥算法有RSA、Elgamal等。 RSA公钥密码算法是由美国麻省理工学院(MIT)的Rivest,Shamir和Adleman在1978年提出来的,并以她们的名字的有字母命名的。RSA是第一个安全、实用的公钥密码算法,已经成为公钥密码的国际标准,是当前应用广泛的公钥密码体制。

RSA的基础是数论的Euler定理,其安全性基于二大整数因子分解问题的困难性,公私钥是一对大素数的函数。而且该算法已经经受住了多年深入的密码分析,虽然密码分析者既不能证明也不能否定RSA的安全性,但这不恰恰说明该算法有其一定的可信度。 4.系统功能描述与软件模块划分 功能:

RSA加密算法加密与解密过程解析

RSA加密算法加密与解密过程解析 1.加密算法概述 加密算法根据内容是否可以还原分为可逆加密和非可逆加密。 可逆加密根据其加密解密是否使用的同一个密钥而可以分为对称加密和非对称加密。 所谓对称加密即是指在加密和解密时使用的是同一个密钥:举个简单的例子,对一个字符串C做简单的加密处理,对于每个字符都和A做异或,形成密文S。 解密的时候再用密文S和密钥A做异或,还原为原来的字符串C。这种加密方式有一个很大的缺点就是不安全,因为一旦加密用的密钥泄露了之后,就可以用这个密钥破解其他所有的密文。 非对称加密在加密和解密过程中使用不同的密钥,即公钥和私钥。公钥用于加密,所有人都可见,私钥用于解密,只有解密者持有。就算在一次加密过程中原文和密文发生泄漏,破解者在知道原文、密文和公钥的情况下无法推理出私钥,很大程度上保证了数据的安全性。 此处,我们介绍一种非常具有代表性的非对称加密算法,RSA加密算法。RSA 算法是1977年发明的,全称是RSA Public Key System,这个Public Key 就是指的公共密钥。 2.密钥的计算获取过程 密钥的计算过程为:首先选择两个质数p和q,令n=p*q。 令k=?(n)=(p?1)(q?1),原理见4的分析 选择任意整数d,保证其与k互质 取整数e,使得[de]k=[1]k。也就是说de=kt+1,t为某一整数。

3.RSA加密算法的使用过程 同样以一个字符串来进行举例,例如要对字符串the art of programming 进行加密,RSA算法会提供两个公钥e和n,其值为两个正整数,解密方持有一个私钥d,然后开始加密解密过程过程。 1. 首先根据一定的规整将字符串转换为正整数z,例如对应为0到36,转化后形成了一个整数序列。 2. 对于每个字符对应的正整数映射值z,计算其加密值M=(N^e)%n. 其中N^e表示N的e次方。 3. 解密方收到密文后开始解密,计算解密后的值为(M^d)%n,可在此得到正整数z。 4. 根据开始设定的公共转化规则,即可将z转化为对应的字符,获得明文。 4.RSA加密算法原理解析 下面分析其内在的数学原理,说到RSA加密算法就不得不说到欧拉定理。 欧拉定理(Euler’s theorem)是欧拉在证明费马小定理的过程中,发现的一个适用性更广的定理。 首先定义一个函数,叫做欧拉Phi函数,即?(n),其中,n是一个正整数。?(n)=总数(从1到n?1,与n互质整数) 比如5,那么1,2,3,4,都与5互质。与5互质的数有4个。?(5)=4再比如6,与1,5互质,与2,3,4并不互质。因此,?(6)=2

实验四RSA加解密算法的实现

实验四 RSA加解密算法的实现 一.实验目的 1、对算法描述可进行充分理解,精确理解算法的各个步骤。 2、完成RSA软件算法的详细设计。 3、用C++完成算法的设计模块。 4、编制测试代码。 二.实验内容 1.实验原理及基本技术路线图(方框原理图) 加密过程: 第一步,用户首先输入两个素数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]中,算法如下: 第二步,输出对加密前的明文和加密并解密后的密文进行比较,判断两个数组是否一致,从而得知算法是否正确。

2.所用仪器、材料(设备名称、型号、规格等) 计算机一台、vc6.0 3.实验方法、步骤 #include #include 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;

RSA加密算法的基本原理

RSA加密算法的基本原理 1978年RSA加密算法是最常用的非对称加密算法,CFCA 在证书服务中离不了它。但是有不少新来的同事对它不太了解,恰好看到一本书中作者用实例对它进行了简化而生动的描述,使得高深的数学理论能够被容易地理解。我们经过整理和改写特别推荐给大家阅读,希望能够对时间紧张但是又想了解它的同事有所帮助。 RSA是第一个比较完善的公开密钥算法,它既能用于加密,也能用于数字签名。RSA以它的三个发明者Ron Rivest,Adi Shamir,Leonard Adleman的名字首字母命名,这个算法经受住了多年深入的密码分析,虽然密码分析者既不能证明也不能否定RSA的安全性,但这恰恰说明该算法有一定的可信性,目前它已经成为最流行的公开密钥算法。 RSA的安全基于大数分解的难度。其公钥和私钥是一对大素数(100到200位十进制数或更大)的函数。从一个公钥和密文恢复出明文的难度,等价于分解两个大素数之积(这是公认的数学难题)。 RSA的公钥、私钥的组成,以及加密、解密的公式可见于下表: 可能各位同事好久没有接触数学了,看了这些公式不免一头雾水。别急,在没有正式讲解RSA加密算法以前,让我们先复习一下数学上的几个基本概念,它们在后面的介绍中要用到: 一、什么是“素数”? 素数是这样的整数,它除了能表示为它自己和1的乘积以外,不能表示为任何其它两个整数的乘积。例如,15=3*5,所以15不是素数;又如,12=6*2=4*3,所以12也不是素数。另一方面,13除了等于13*1以外,不能表示为其它任何两个整数的乘积,所以13是一个素数。素数也称为“质数”。 二、什么是“互质数”(或“互素数”)? 小学数学教材对互质数是这样定义的:“公约数只有1的两个数,叫做互质数。”这里所说的“两个数”是指自然数。 判别方法主要有以下几种(不限于此): (1)两个质数一定是互质数。例如,2与7、13与19。 (2)一个质数如果不能整除另一个合数,这两个数为互质数。例如,3与10、5与26。(3)1不是质数也不是合数,它和任何一个自然数在一起都是互质数。如1和9908。(4)相邻的两个自然数是互质数。如15与16。 (5)相邻的两个奇数是互质数。如49与51。 (6)大数是质数的两个数是互质数。如97与88。 (7)小数是质数,大数不是小数的倍数的两个数是互质数。如7和16。 (8)两个数都是合数(二数差又较大),小数所有的质因数,都不是大数的约数,这两个数是互质数。如357与715,357=3×7×17,而3、7和17都不是715的约数,

RSA加解密算法C语言的实现

#include #include #include #include #include #include #define MAX 100 #define LEN sizeof(struct slink) void sub(int a[MAX],int b[MAX] ,int c[MAX] ); struct slink { int bignum[MAX]; /*bignum[98]用来标记正负号,1正,0负bignum[99]来标记实际长度*/ struct slink *next; }; /*/--------------------------------------自己建立的大数运算库-------------------------------------*/ void print( int a[MAX] ) { int i; for(i=0;il2) return 1; if (l1=0;i--) { if (a1[i]>a2[i]) return 1 ; if (a1[i]

rsa算法对字符串的加密解密

#include #include /*类型定义*/ typedef long int li_ELEMTYPE; typedef int i_ELEMTYPE; typedef char c_ELEMTYPE; /*宏定义*/ #define TEXT_MAX_NUM 20 #define RSA_ENCODE_TEXT "xidianuniversity" /*RSA编解码函数*/ /* 输入输出说明:r = a^b mod c 编码1.a-------原始加密明文数据 2.b-------加密指数(p-1)(q-1) 3.c-------p*q 4.r-------加密后密文数据 解码1.a-------原始解密密文数据 2.b-------解密指数d 3.c-------p*q 4.r-------解密后明文数据 */ li_ELEMTYPE Rsa_un_enCode(li_ELEMTYPE a,li_ELEMTYPE b,li_ELEMTYPE c) { li_ELEMTYPE r = 1; b = b + 1; while(b != 1) { r = r * a; r = r % c; b--; } return r; } /*main主函数*/ int main(int argc, char **argv) { li_ELEMTYPE p,q,e,d,n,t; i_ELEMTYPE i = 0; i_ELEMTYPE acSecret_Text[TEXT_MAX_NUM]; c_ELEMTYPE acPublic_Text[TEXT_MAX_NUM]; memset(acSecret_Text, 0, sizeof(acSecret_Text));

密码学-RSA加密解密算法的实现课程设计报告

密码学课程报告《RSA加密解密算法》 专业:信息工程(信息安全) 班级:1132102 学号:201130210214 姓名:周林 指导老师:阳红星 时间:2014年1月10号

一、课程设计的目的 当前最著名、应用最广泛的公钥系统RSA是在1978年,由美国麻省理工学院(MIT)的Rivest、Shamir和Adleman在题为《获得数字签名和公开钥密码系统的方法》的论文中提出的。 RSA算法是第一个既能用于数据加密也能用于数字签名的算法,因此它为公用网络上信息的加密和鉴别提供了一种基本的方法。它通常是先生成一对RSA 密钥,其中之一是保密密钥,由用户保存;另一个为公开密钥,可对外公开,甚至可在网络服务器中注册,人们用公钥加密文件发送给个人,个人就可以用私钥解密接受。为提高保密强度,RSA密钥至少为500位长,一般推荐使用1024位。 公钥加密算法中使用最广的是RSA。RSA算法研制的最初理念与目标是努力使互联网安全可靠,旨在解决DES算法秘密密钥的利用公开信道传输分发的难题。而实际结果不但很好地解决了这个难题;还可利用RSA来完成对电文的数字签名以抗对电文的否认与抵赖;同时还可以利用数字签名较容易地发现攻击者对电文的非法篡改,以保护数据信息的完整性。此外,RSA加密系统还可应用于智能IC卡和网络安全产品。 二、RSA算法的编程思路 1.确定密钥的宽度。 2.随机选择两个不同的素数p与q,它们的宽度是密钥宽度的1/2。 3.计算出p和q的乘积n 。 4.在2和Φ(n)之间随机选择一个数e , e 必须和Φ(n)互素,整数e 用做加密密钥(其中Φ(n)=(p-1)*(q-1))。 5.从公式ed ≡ 1 mod Φ(n)中求出解密密钥d 。 6.得公钥(e ,n ), 私钥 (d , n) 。 7.公开公钥,但不公开私钥。 8.将明文P (假设P是一个小于n的整数)加密为密文C,计算方法为: C = Pe mod n 9.将密文C解密为明文P,计算方法为:P = Cd mod n 然而只根据n和e(不是p和q)要计算出d是不可能的。因此,任何人都可对明文进行加密,但只有授权用户(知道d)才可对密文解密 三、程序实现流程图: 1、密钥产生模块:

用实例讲解RSA加密算法(精)

可能各位同事好久没有接触数学了,看了这些公式不免一头雾水。别急,在没有正式讲解RSA加密算法以前,让我们先复习一下数学上的几个基本概念,它们在后面的介绍中要用到: 一、什么是“素数”? 素数是这样的整数,它除了能表示为它自己和1的乘积以外,不能表示为任何其它两个整数的乘积。例如,15=3*5,所以15不是素数;又如,12=6*2=4*3,所以12也不是素数。另一方面,13除了等于13*1以外,不能表示为其它任何两个整数的乘积,所以13是一个素数。素数也称为“质数”。 二、什么是“互质数”(或“互素数”)? 小学数学教材对互质数是这样定义的:“公约数只有1的两个数,叫做互质数。”这里所说的“两个数”是指自然数。 判别方法主要有以下几种(不限于此): (1)两个质数一定是互质数。例如,2与7、13与19。 (2)一个质数如果不能整除另一个合数,这两个数为互质数。例如,3与10、5与26。(3)1不是质数也不是合数,它和任何一个自然数在一起都是互质数。如1和9908。(4)相邻的两个自然数是互质数。如15与16。 (5)相邻的两个奇数是互质数。如49与51。 (6)大数是质数的两个数是互质数。如97与88。 (7)小数是质数,大数不是小数的倍数的两个数是互质数。如7和16。 (8)两个数都是合数(二数差又较大),小数所有的质因数,都不是大数的约数,这两个数是互质数。如357与715,357=3×7×17,而3、7和17都不是715的约数,这两个数为互质数。等等。 三、什么是模指数运算? 指数运算谁都懂,不必说了,先说说模运算。模运算是整数运算,有一个整数m,以n 为模做模运算,即m mod n。怎样做呢?让m去被n整除,只取所得的余数作为结果,就

RSA加密解密

苏州科技学院 实验报告 实验四 学生姓名:学号:指导教师: 实验地点:计算机学院大楼东309 实验时间:4.21 一、实验室名称:软件实验室 二、实验项目名称:RSA加密解密 三、实验学时:4学时 四、实验原理: 加密过程: 第一步,用户首先输入两个素数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、对算法描述可进行充分理解,精确理解算法的各个步骤。 2、完成RSA软件算法设计。 3、用C++完成算法的设计模块。 六、实验内容: 通过编写的程序完成RSA加密解密功能 七、实验器材(设备、元器件): (1)个人计算机 (2) Windows 7系统平台 (3) C++开发环境 八、实验数据及结果分析: #include #include

linux下Openssl RSA加密解密实例

1、生成秘钥文件 openssl genrsa -out secret.key 1024 openssl genrsa是生成密钥的命令,-out是指定所生成的密钥文件,secret.key这个文件里包含了公钥和密钥两部分,就是说这个文件即可用来加密也可以用来解密,如果想分开也可以用下面的命令将公钥导出。命令中的1024是指生成的密钥的长度。 2、将公钥导出 openssl rsa -in secret.key -pubout -out secret_pub.key 将公钥从secret.key中导出,-in指定输入文件,-out指定提取生成公钥的文件名。这样我们就有了一个公钥和一个私钥(包含公钥)。下面我们就可以用公钥来加密文件了。 3. 下面是一个用C实现的OpenSSL RSA加密的程序,程序实现的是公钥加密,私钥解密的过程,当然也可以实现私钥加密,公钥解密,大家可以根据程序后面的函数解释来进行各种更改。 下面将通过第一部分生成的加密文件中的公钥secret_pub.key来实现对字符串的加密,用密钥文件secret.key来实现字符串的解密,程序已经经过编译运行,可以直接实验、运行。 myRSA.h: 1 #ifndef _MY_RSA_H_ 2 #define _MY_RSA_H_ 3 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 11 #define BUFFSIZE 1024 12 #define PUBLICKEY “secret_pub.key” 13 #define OPENSSLKEY “secret.key” 14 15 char* my_EncryptFunc(char *str,char *path_key); //加密函数 16 char* my_DecryptFunc(char *str,char *path_key); //解密函数 17

RSA加密算法及实现

数学文化课程报告题目:RSA公钥加密算法及实现

RSA公钥加密算法及实现 摘要 公钥密码是密码学界的一项重要发明,现代计算机与互联网中所使用的密码技术都得益于公钥密码。公钥密码是基于数学的上的困难问题来保证其性。其中RSA加密算法是一项重要的密码算法,RSA利用大整数的质数分解的困难性,从而保证了其相对安全性。但如果发现了一种快速进行质数分解的算法,则RSA算法便会失效。本文利用C 语言编程技术进行了RSA算法的演示[1]。 关键词:C语言编程、RSA算法、应用数学。

RSA public key encryption algorithm Abstract Public key cryptography is an important invention in cryptography, thanks to public key cryptography, and it is used in modern computer and Internet password technology. Public key cryptography is based on the mathematics difficult problem to ensure its confidentiality. The RSA public key encryption algorithm is an important cryptographic algorithm, RSA using the difficulty that large integer is hard to be factorized into prime Numbers to ensure it safety. But if you can find a kind of fast algorithm to do the factorization, RSA algorithm will be failure. In this paper we used C language programming technology to demonstrate the RSA algorithm. Keywords:C language programming、RSA algorithm、Applied mathematics

用实例给新手讲解RSA加密算法

RSA加密算法是最常用的非对称加密算法,CFCA在证书服务中离不了它。但是有不少新来的同事对它不太了解,恰好看到一本书中作者用实例对它进行了简化而生动的描述,使得高深的数学理论能够被容易地理解。我们经过整理和改写特别推荐给大家阅读,希望能够对时间紧张但是又想了解它的同事有所帮助。 RSA是第一个比较完善的公开密钥算法,它既能用于加密,也能用于数字签名。RSA以它的三个发明者Ron Rivest, Adi Shamir, Leonard Adleman的名字首字母命名,这个算法经受住了多年深入的密码分析,虽然密码分析者既不能证明也不能否定RSA的安全性,但这恰恰说明该算法有一定的可信性,目前它已经成为最流行的公开密钥算法。 RSA的安全基于大数分解的难度。其公钥和私钥是一对大素数(100到200位十进制数或更大)的函数。从一个公钥和密文恢复出明文的难度,等价于分解两个大素数之积(这是公认的数学难题)。 RSA的公钥、私钥的组成,以及加密、解密的公式可见于下表: 可能各位同事好久没有接触数学了,看了这些公式不免一头雾水。别急,在没有正式讲解RSA加密算法以前,让我们先复习一下数学上的几个基本概念,它们在后面的介绍中要用到: 一、什么是“素数”? 素数是这样的整数,它除了能表示为它自己和1的乘积以外,不能表示为任何其它两个整数的乘积。例如,15=3*5,所以15不是素数;又如,12=6*2=4*3,所以12也不是素数。另一方面,13除了等于13*1以外,不能表示为其它任何两个整数的乘积,所以13是一个素数。素数也称为“质数”。 二、什么是“互质数”(或“互素数”)? 小学数学教材对互质数是这样定义的:“公约数只有1的两个数,叫做互质数。”这里所说的“两个数”是指自然数。 判别方法主要有以下几种(不限于此): (1)两个质数一定是互质数。例如,2与7、13与19。 (2)一个质数如果不能整除另一个合数,这两个数为互质数。例如,3与10、5与26。 (3)1不是质数也不是合数,它和任何一个自然数在一起都是互质数。如1和9908。 (4)相邻的两个自然数是互质数。如15与16。 (5)相邻的两个奇数是互质数。如49与51。 (6)大数是质数的两个数是互质数。如97与88。 (7)小数是质数,大数不是小数的倍数的两个数是互质数。如7和16。 (8)两个数都是合数(二数差又较大),小数所有的质因数,都不是大数的约数,这两个数是互质数。如357与715,357=3×7×17,而3、7和17都不是715的约数,这两个数为互质数。等等。 三、什么是模指数运算? 指数运算谁都懂,不必说了,先说说模运算。模运算是整数运算,有一个整数m,以n为模做模运算,即m mod n。怎样做呢?让m去被n整除,只取所得的余数作为结果,就叫做模运算。例如,10 mod 3=1; 26 mod 6=2;28 mod 2 =0等等。

RSA生成公私钥及加密解密过程演示

本练习主机A、B为一组,C、D为一组,E、F为一组。 首先使用“快照X”恢复Windows系统环境。 一.RSA生成公私钥及加密解密过程演示 (1)本机进入“密码工具”|“加密解密”|“RSA加密算法”|“公私钥”页签,在生成公私钥区输入素数p和素数q,这里要求p和q不能相等(因为很容易开平方求出p与q的值)并且p与q的乘积也不能小于127(因为小于127不能包括所有的ASCII码,导致加密失败),你选用的素数p与q分别是:p=11;q=13。 (2)单击“随机选取正整数e”下拉按钮,随机选取e,e= 103 。 (3)单击“生成公私钥”按钮生成公私钥,记录下公钥(e,n)=(103,143),私钥 (d,n)=(7,143)。 (4)在公私钥生成演示区中输入素数p=11 和素数q=13,还有正整数e=103。 单击“开始演示”按钮查看结果,填写表7-1-1。 表7-1-1 公私钥生成演示结果 (5)在加/解密演示区中输入明文m=45,公钥n=143(m

e*d=1 mod φ(n),d=47。(d,n)=(47,221)。 当公钥e=143时,写出对明文m=40的加密过程(加密过程计算量比较大,请使用密码工具 的RSA工具进行计算): c=m e mod n40 143 (mod 221)= 密文c: 105 。 利用生成的私钥d,对生成的密文进行解密:m=c d mod n105 47 (mod 221)= 明文 m:40 。 二.RSA加密解密 (1)本机在生成公私钥区输入素数p和素数q,这里要求p和q不能相等,并且p与q的乘积也不能小于127,记录你输入的素数,p=13,q=17。 (2)点击“随机选取正整数e:”下拉按钮,选择正整数e,e=143。 (3)点击“生成公私钥”按钮生成公私钥,记录下公钥e= 143 , n= 221 ;私钥d= 47 ,n= 221 。将自己的公钥通告给同组主机。 (4)本机进入“加密/解密”页签,在“公钥e部分”和“公钥n部分”输入同组主机的公钥,在明文输入区输入明文:计算机网络安全。 单击“加密”按钮对明文进行加密,单击“导出”按钮将密文导出到RSA共享文件夹 (D:\Work\Encryption\RSA\)中,通告同组主机获取密文。得到密文 -204,-141,-196,-61,-205,-37,-51,-83,-82,-168,-163,-182,-75,-119 (5)进入“加密/解密”页签,单击“导入”按钮,从同组主机的RSA共享文件夹中将密文导入,点击“解密”按钮,切换到解密模式,在“私钥d部分47”和“私钥n部分221”输入自己的私钥,再次点击“解密”按钮进行RSA解密。得到明文:计算机网络安全(6)将破解后的明文与同组主机记录的明文比较。

RSA加密的简易实现.

安全学实验报告 —RSA加密解密的简单实现 华南师范大学赵教授 RSA介绍: 当前最著名、应用最广泛的公钥系统RSA是在1978年,由美国麻省理工学院(MIT)的Rivest、Shamir和Adleman在题为《获得数字签名和公开钥密码系统的方法》的论文中提出的。 RSA算法是第一个既能用于数据加密也能用于数字签名的算法,因此它为公用网络上信息的加密和鉴别提供了一种基本的方法。它通常是先生成一对RSA 密钥,其中之一是保密密钥,由用户保存;另一个为公开密钥,可对外公开,甚至可在网络服务器中注册,人们用公钥加密文件发送给个人,个人就可以用私钥解密接受。为提高保密强度,RSA密钥至少为500位长,一般推荐使用1024位。 公钥加密算法中使用最广的是RSA。RSA算法研制的最初理念与目标是努力使互联网安全可靠,旨在解决DES算法秘密密钥的利用公开信道传输分发的难题。而实际结果不但很好地解决了这个难题;还可利用RSA来完成对电文的数字签名以抗对电文的否认与抵赖;同时还可以利用数字签名较容易地发现攻击者对电文的非法篡改,以保护数据信息的完整性。此外,RSA加密系统还可应用于智能IC卡和网络安全产品。 一.系统总体方案: 1.要求:编写RSA加密解密演示程序,用户自己输入两个素数P,Q以及公钥E,程序判断P,Q为素数后计算得到公钥(e,n),私钥(d,n)并显示。 输入明文密文并可以进行加密解密。 2.数学原理: 1.密钥的生成选择p,q为两个大的互异素数计算n=p*q, ψ(n)=(p-1)(q-1) 选择整数e使gcd(ψ(n),e)=1(互质),(1

RSA加解密过程及实现

******************** 本科生作业 ******************** 兰州理工大学 计算机与通信学院 2017年春季学期 信息安全课程 专业:物联网工程 姓名: 学号: 授课教师:郭显 成绩:

RSA 加解密过程及其实现 概述 RSA 算法 RSA 加密算法是一种最常用的非对称加密算法,CFCA 在证书服务中离不了它。在公钥加密标准和电子商业中,RSA 被广泛使用。 RSA 算法使用乘方运算,明文以分组为单位进行加密,每个分组的二进制值均小于n ,也就是说,分组的大小必须小于或等于1)(log 2+n 位,在实际应用中,分组的大小i 位,其中12 2+≤

用java编程实现RSA加密算法

用java编程实现RSA加密算法 RSA加密算法是目前应用最广泛的公钥加密算法,特别适用于通过Internet传送的数据,常用于数字签名和密钥交换。那么我今天就给大家介绍一下如何利用Java编程来实现RSA 加密算法。 一、RSA加密算法描述 RSA加密算法是1978年提出的。经过多年的分析和研究,在众多的公开密钥加密算法中,RSA加密算法最受推崇,它也被推荐为公开密钥数据加密标准。 由数论知识可知,若将一个具有大素数因子的合数进行分解是很困难的,或者说这个问题的计算量是令人望而生畏的,而RSA加密算法正是建立在这个基础上的。 在RSA加密算法中,—个用户A可根据以下步骤来选择密钥和进行密码转换: (1)随机的选取两个不同的大素数p和q(一般为100位以上的十进制数),予以保密;(2)计算n=p*q,作为用户A的模数,予以公开; (3)计算欧拉(Euler)函数z=(p-1)*(q-1),予以保密; (4)随机的选取d与z互质,作为A的公开密钥; (5)利用Euclid算法计算满足同余方程e*d≡1modz的解d,作为用户A的保密密钥;(6)任何向用户A发送信息M的用户,可以用A的公开模数D和公开密钥e根据C=Me mod n得到密文C;

RSA加密算法的安全性是基于大素数分解的困难性。攻击者可以分解已知的n,得到p和q,然后可得到z;最后用Euclid算法,由e和z得到d。然而要分解200位的数,需要大约40亿年。 二、用Java语言描述RSA加密算法的原理 假设我们需要将信息从机器A传到机器B,首先由机器B随机确定一个private_kcy(我们称之为密钥),可将这个private_key始终保存在机器B中而不发出来。然后,由这个private_key计算出public_key(我们称之为公钥)。这个public_key的特性是:几乎不可能通过该public_key计算生成它的priyate_key。接下来通过网络把这个public_key传给机器A,机器A收到public_key后,利用public_key将信息加密,并把加密后的信息通过网络发送到机器B,最后机器B利用已知的pri.rate_key,就可以解开加密信息。 步骤: (1)首先选择两个大素数p和q,计算n=p*q;m=(p-1)(q一1); (2)而后随机选择加密密钥public_key,要求和m互质(比如public_key=m-1);(3)利用Euclid算法计算解密密钥priyate_key,使private_key满足public_key*private_key—1(mod m),其中public_key,n是作为公钥已知,priVate_key 是密钥; (4)加密信息text时,利用公式secretWord=texI^Public_key (mod n)得到密文8ecretword; (5)解密时利用公式word=text^priVate_key(mod n)得到原文word=text。

RSA算法实验报告

RSA算法的实现 实验原理 算法原理 RSA公开密钥密码体制。所谓的公开密钥密码体制就是使用不同的加密密钥与解密密钥,是一种“由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制。 RSA算法是一种非对称密码算法,所谓非对称,就是指该算法需要一对密钥,使用其中一个加密,则需要用另一个才能解密。 RSA的算法涉及三个参数,n、e1、e2。其中,n是两个大质数p、q的积,n的二进制表示时所占用的位数,就是所谓的密钥长度。e1和e2是一对相关的值,e1可以任意取,但要求e1与(p-1)*(q-1)互质;再选择e2,要求(e2*e1)mod((p-1)*(q-1))=1。(n,e1),(n,e2)就是密钥对。其中(n,e1)为公钥,(n,e2)为私钥。 RSA加解密的算法完全相同,设A为明文,B为密文,则:A=B^e2 mod n;B=A^e1 mod n;(公钥加密体制中,一般用公钥加密,私钥解密) e1和e2可以互换使用,即: A=B^e1 mod n;B=A^e2 mod n; 密钥生成 首先要使用概率算法来验证随机产生的大的整数是否质数,这样的算法比较快而且可以消除掉大多数非质数。假如有一个数通过了这个测试的话,那么要使用一个精确的测试来保证它的确是一个质数。 密钥分配 和其它加密过程一样,对RSA来说分配公钥的过程是非常重要的。分配公钥的过程必须能够抵挡一个从中取代的攻击。假设Eve交给Bob一个公钥,并使Bob相信这是Alice的公钥,并且她可以截下Alice和Bob之间的信息传递,那么她可以将她自己的公钥传给Bob,Bob以为这是Alice的公钥。 步骤如下(这里设B为是实现着) (1)B寻找出两个大素数p和q。 (2)B计算出n=p*q和?(n)=)(p-1)*(q-1)。 (3)B选择一个随机数e(0

RSA加解密算法

RSA加解密算法 1实验目的 了解RSA加解密算法 2实验内容 编程实现RSA加解密算法 3实验步骤 3.1选择素数p,q 选择p,q,p,q都是素数,p≠q。由于P和q都是大素数,所以为了方便由程序自动生成。 //产生随机素数p和q void prime_random(int *p,int *q) { int i,k; time_t t; p[0]=1; q[0]=3; // p[19]=1; // q[18]=2; p[MAX-1]=10; q[MAX-1]=11; do { t=time(NULL); srand((unsigned long)t); for(i=1;i

k=rand()%10; while (k==0) { k=rand()%10; } p[p[MAX-1]-1]=k; }while((is_prime_san(p))!=1); printf("素数p 为: "); for(i=0;i

相关主题