实验四RSA加解密算法的实现
实验4_公钥密码RSA加解密算法模拟程序

实验四:公钥密码RSA加解密算法模拟程序
一、实验目的
1、编写简单的RSA加解密程序。
2、理解公钥密码体系的相关知识,尤其是RSA算法的加密与解密计算过程。
二、实验内容
编写程序实现RSA加解密算法,并通过demo验证算法的正确性。
具体要求如下:
1)能够对指定字符串加密并对加密后的密文进行解密,通过对比解密后的字符串与源字符串,证明程序加密与解密的正确性。
2)输出与加解密相关的各项参数,例如公钥、私钥、通过乘积运算构成大整数的两个素数等。
三、实验步骤及实验结果
1、实验步骤如下:
1)利用参考代码在VS2008开发工具编中写一个控制台程序
2)经过编译、链接生成可执行程序,运行程序,结果显示为:(因为调用Random函数,所以每次运行的结果都会不一样)
3)此外生成界面如下,输入明文
过乘积运算构成大整数的两个素数
5)按下“加密”,得到加密的密文;按下“解密”,得到解密的明文
四、实验结果分析
通过编写模拟RSA的加密与解密的程序,成功加密明文,得到加密的密文,并且解密后得到相应明文。
五、实验心得体会
通过学习的相应的RSA的加密与解密的知识,学会了RSA的加密解密的具体步骤。
同时了解了相关加密解密的过程。
rsa加解密实验报告

五、实验目的:
目的:实现一种密码算法(古典密码算法,DES算法,AES算法,RSA算法,ECC算法)并掌握其原理。这次实验我们决定实现RSA算法。
a)选择并熟悉一种密码算法。
b)编写概要设计,详细设计报告
c)使用Eclipse工具,编码.
d)调试及测试
九、实验数据及结果分析:
公钥:
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCYU/+I0+z1aBl5X6DUUOHQ7FZpmBSDbKTtx89J
EcB64jFCkunELT8qiKly7fzEqD03g8ALlu5XvX+bBqHFy7YPJJP0ekE2X3wjUnh2NxlqpH3/B/xm
}
/**
*校验数字签名
*
* @param data
*加密数据
* @param publicKey
*公钥
* @param sign
*数字签名
*
* @return校验成功返回true失败返回false
* @throws Exception
*
*/
public static boolean verify(byte[] data, String publicKey, String sign)
Df2B5JmdEG5Y2o0nLXwG2w44OLct/k2uD4cEcuITY5Dvi/4BftMCZwm/dnhEgQJACIktJSnJwxLV
o9dchENPtlsCM9C/Sd2EWpqISSUlmfugZbJBwR5pQ5XeMUqKeXZYpP+HEBj1nS+tMH9u2/IGEwJA
rsa算法加解密代码的编写

rsa算法加解密代码的编写一、引言RSA算法是一种非对称加密算法,广泛应用于数据加密和数字签名等领域。
本文将介绍如何使用Python语言编写RSA算法的加解密代码,包括密钥生成、加密和解密操作。
二、算法原理RSA算法基于大数分解的困难性,通过使用公钥和私钥来实现加密和解密操作。
公钥用于加密数据,私钥用于解密数据。
在加密和解密过程中,使用了模幂运算和异或运算等基本运算。
三、代码实现以下是一个简单的RSA算法加解密代码示例,使用Python语言实现:```pythonimportrandom#生成RSA密钥对defgenerate_keypair(bits):#生成公钥和私钥public_key=e=65537#常用的公钥指数,需要是质数private_key=d=random.randrange(bits)#返回公钥和私钥returnpublic_key,private_key#加密函数defencrypt(data,public_key):#将数据转换为二进制字符串bin_data=str(data).encode('hex')#计算加密结果encrypted=pow(bin_data,public_key,10**n)%10**mreturnencrypted.hex()#解密函数defdecrypt(encrypted_data,private_key):#将加密结果转换为二进制字符串bin_encrypted=encrypted_data.decode('hex')#计算解密结果decrypted=pow(bin_encrypted,d,10**n)%10**mreturnint(decrypted)```代码说明:*`generate_keypair`函数用于生成RSA密钥对,其中`bits`参数指定密钥长度,常见的有1024位和2048位。
*`encrypt`函数用于对数据进行加密,其中`data`是要加密的数据,`public_key`是公钥。
RSA加解密算法C语言的实现

RSA加解密算法C语言的实现RSA(Rivest-Shamir-Adleman)是一种非对称加密算法,常用于保护网络通信的安全性。
它的主要思想是通过生成一对公钥和私钥,使用公钥进行加密,使用私钥进行解密,从而保证安全性。
RSA算法的实现一般包括生成密钥对、加密和解密三个部分。
1.生成密钥对RSA算法的第一步是生成一对公钥和私钥。
生成密钥对的过程如下:1)选择两个较大的质数p和q;2)计算N=p*q,确定模数N;3)计算欧拉函数φ(N)=(p-1)*(q-1);4)选择一个整数e,满足1<e<φ(N)且e与φ(N)互质;5)计算e关于模φ(N)的乘法逆元d,满足d * e ≡ 1 (modφ(N))。
生成密钥对的代码实现如下:```c#include <stdio.h>typedef unsigned long long int ulli;ulli gcd(ulli a, ulli b)if (b == 0)return a;}return gcd(b, a % b);ulli inverse(ulli e, ulli phi)ulli d = 0;ulli x1 = 0, x2 = 1, y1 = 1, y2 = 0; ulli temp_phi = phi;while (e > 0)ulli quotient = phi / e;ulli remainder = phi - quotient * e; phi = e;e = remainder;ulli x = x2 - quotient * x1;ulli y = y2 - quotient * y1;x2=x1;x1=x;y2=y1;y1=y;}if (phi != 1)return -1; // 没有乘法逆元}if (y2 < 0)d = temp_phi + y2;} elsed=y2;}return d;int mainulli p, q, N, phi, e, d;printf("Enter two prime numbers: ");scanf("%llu %llu", &p, &q);N=p*q;phi = (p - 1) * (q - 1);printf("Enter a number e such that 1 < e < phi(N) and gcd(e, phi(N)) = 1: ");scanf("%llu", &e);d = inverse(e, phi);printf("Public Key (N, e) = (%llu, %llu)\n", N, e);printf("Private Key (N, d) = (%llu, %llu)\n", N, d);return 0;```2.加密RSA算法的第二步是使用公钥进行加密。
编码理论实验报告实验四加密编码——RSA公钥密码

实验名称实验四加密编码--------RSA公钥密码一、实验目的1. 了解RSA公钥密码进行加密、解密的原理;2. 理解RSA公钥密码进行加密、解密的算法和步骤;3. 正确运用C语言编程实现RSA加密、解密功能。
二、实验内容1. 在Visual C++环境中运用C语言熟练实现RSA加密;2. 在Visual C++环境中运用C语言熟练实现RSA解密。
三、实验原理1. RSA的算法结构相当简单,整个算法可以描述如下:(1)选取两个大素数p和q(保密);(2)计算n=pq(公开),γ=(p一1〉(q-1)(保密);(3)随机选取整数e(公开,加密密钥),使得ed(ear)=1;(4)计算d(保密,私人密钥),使得ed≡1(mod r),即d=e-1(mod r);(5)加密:c=me mod n;(6)解密:m=cd mod n。
2. RSA算法的特点利用RSA对被加密的信息m (长度小于log2n的整数)进行加密得到相应的密文c=me mod n;解密算法则是计算m=cd modn。
RSA的优点是不需要密钥分配,但缺点是速度慢。
RSA的安全基于大数分解的难度。
其公开密钥和私人密钥是一对大素数(100到200个十进制数或更大)的函数。
从一个公开密钥和密文中恢复出明文的难度等价于分解两个大素数之积。
3. 相关数论原理(1)剩余系设m>0, Cr = {a | a=r+qm, q∈Z}(r=0,1,...,m-1), 则C,C1,...,Cm-1称为模数m的剩余系。
在C0 ,C1,...,Cm-1中各取一数aj∈Cj,j=0,1,...,m-1,此m个数a0 ,a1,...,am-1称为模数m的一组完全剩余系。
特别地,完全剩余系0,1,...,m-1称为模数m的非负最小完全剩余系。
如果Cj 里面的数与m互素,称Cj为与模数m互素的剩余类。
在与m互素的全部剩余类中,各取一数所组成的集合就称为模数m的一组既约剩余系。
基于RSA算法的加解密系统实现

基于RSA算法的加解密系统实现RSA算法是一种非对称加密算法,由Ron Rivest、Adi Shamir和Leonard Adleman三人于1978年提出。
它的安全性基于大数分解困难的问题,在现代密码学中被广泛应用于加密通信、数字签名等领域。
RSA算法主要包括密钥生成、加密和解密三个步骤。
首先是密钥生成。
RSA算法使用两个大素数p和q作为私钥的一部分,公钥则由这两个素数的乘积n和一个与(p-1)(q-1)互质的数e组成。
在实际应用中,素数p和q的选取要求较大,一般为1024位或2048位。
生成密钥的具体步骤如下:1.选择两个不同的大素数p和q。
2.计算n=p*q。
3.计算φ(n)=(p-1)*(q-1)。
4.选择一个与φ(n)互质的数e,1<e<φ(n)。
5. 计算d,使得 d * e ≡ 1 (mod φ(n))。
根据扩展欧几里得算法,可以得到d的值。
生成了公钥(n,e)和私钥(d,p,q)后,就可以进行加密和解密操作了。
加密过程如下:1.将明文M转换为整数m,满足0≤m<n。
2. 计算密文C=C^e (mod n)。
解密过程如下:1. 计算明文M=C^d (mod n)。
2.将整数m还原为明文M。
在实际应用中,加密的明文可以是文件、数据等信息,密文则可以通过网络等途径传输,只有掌握私钥的人才能解密得到明文。
这样就保证了信息的安全性。
1.生成密钥对:选择合适的素数p和q,并计算出n、φ(n)、e和d的值。
2.加密:将明文转换为整数m,利用公钥(n,e)进行加密,得到密文C。
3.解密:利用私钥(d,p,q)进行解密,得到明文M。
4.验证:将明文M和原始的明文进行比较,确保解密正确。
可以对生成密钥对、加密和解密等功能进行封装,供用户调用。
这样用户只需要提供明文和公钥,就可以得到密文;而解密则需要私钥才能进行。
需要注意的是,RSA算法虽然安全性较高,但是运算速度较慢,特别是在处理大素数时。
实验四:加密算法DES和RSA的实现.doc

实验(实训)报告项目名称实验四加密算法DES和RSA的实现所属课程名称计算机安全与保密项目类型验证性实验(实训)日期2011年5月17日班级08信息(2)班学号0820400228姓名楼俊指导教师郭柏林浙江财经学院东方学院教务部制实验四:加密算法DES和SDA的实现实验4.1:对称加密算法DES的实现1.实验名称:对称加密算法DES的实现2.实验目的:通过MixedCS软件对实际数据进行加密和解密来了解DES的运行原理3.实验内容:1、直接运行MixedCS.exe ,打开软件的主界面,如图所示2、“浏览文件”按钮,选择要进行DES加密的源文件,成功后在“输出文件”文本框中将自动出现默认的文件名钥”文本框中重新输入相同的4位密钥。
密5、将步骤3的密钥长度设为10位,重复加密过程,此时该软件将自动采用3DES算法进行加密,可以看到加密的时间明显增加了请大家自己试验。
实验4.2:非对称加密算法RSA的实现1.实验名称:非对称加密算法RSA的实现2.实验目的:通过RSATool2v17软件对实际数据进行加密和解密来了解RSA算法的运行原理3.实验原理:(一)、回顾RSA实现的原理i.寻找出两个大素数P和Q。
ii.计算出 N=P*Q和 Z=(p-1)*(Q-1)。
iii.选择一个随机数E(0<E<Z),满足gcd(E,Z)=1。
iv.使用欧几里德扩展算法计算密钥D,即 D=E-1 mod Z。
v.公开(N,E)作为公钥,而(N,D)作为私鈅。
(二)、实例讲解1、选择两个素数P=17,Q=472、计算N=17*47=799;计算Z=(17-1)*(47-1)=736 。
3、选择E=5, 使 gcd(5,736)=14、计算D,D==E-1 mod Z =1, D=589则(799,5)作为公钥,而(799,589)作为私鈅。
设:明文s=19是要进行加密的信息,加密算法为:(19)5 mod 799=797, 解密算法为:(797)589 mod 799=194.实验内容:任务一:验证上述给出的实例进行验证,如下图示在Number Base中选择10作为数制,在 Public Exponent(E)[HEX]中写入E 的值5,在 1st Prime(P)中填入第一个素数17,在2nd Prime(Q)中填入第二个素数47,然后点击 Calc.D 则计算出 N和D。
RSA加解密过程及实现

********************本科生作业********************兰州理工大学计算机与通信学院2017年春季学期信息安全课程专业:物联网工程姓名:学号:授课教师:郭显成绩:RSA 加解密过程及其实现1.RSA 概述1.1 RSA 算法RSA 加密算法是一种最常用的非对称加密算法,CFCA 在证书服务中离不了它。
在公钥加密标准和电子商业中,RSA 被广泛使用。
RSA 算法使用乘方运算,明文以分组为单位进行加密,每个分组的二进制值均小于n ,也就是说,分组的大小必须小于或等于1)(log 2+n 位,在实际应用中,分组的大小i 位,其中122+≤<i i n 。
对明文分组M 和密文分组C ,加密和解密过程如下: n M C e mod =n M n M n C M ed d e d m od m od )(m od ===其中收发双方均已知n ,发送方已知e ,只有接收方已知d ,因此公钥加密算法的公钥为PU={e,n},私钥为PR={d,n}。
该算法要能做公钥加密,必须满足以下条件:(1)可以找到e,d,n,使得对所有的M<n,有M n Med =mod 。
(2)对所有的M<n,计算e M 和d C 是比较容易的。
(3)由e 和n 确定d 是不可行的。
1.2 公钥与私钥(1)随意选择两个大素数p 和q ,p 不等于q ,计算pq n =。
(2)根据欧拉函数,不大于n 且与n 互素的整数个数为)1)(1(--q p(3)选择一个整数e 与)1)(1(--q p 互素,并且e 小于)1)(1(--q p(4)用以下这个公式计算d : ))1)(1mod((1--≡q p de(5)将p 和q 的记录销毁。
),(e n 是公钥,),(d n 是私钥。
),(d n 是秘密的。
Alice 将她的公钥),(e n 传给Bob ,而将她的私钥),(d n 藏起来。
图1 RSA 加密过程2.实例描述(1)选择两个素数,11,17==q p 。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验四 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<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 n
Ciphertext[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();
else
return ;
}
三.实验结果
实验过程原始记录(数据、图表、计算等) ①
②
③。