rsa加解密实验报告

合集下载

实验一 RSA加解密

实验一 RSA加解密

实验一密码学相关实验之RSA加解密算法的实现一、实验目的在本实验中,用VC/ C/C++/Java实现RSA的加解密算法。

完成实验后将能够深入理解RSA 加解密算法及其在VC/ C/C++/Java中的实现过程。

二、实验条件熟悉VC/ C/C++/Java开发环境和有关RSA算法的有关知识;一台安装有VC/ C/C++/Java的计算机。

三、实验内容RSA算法实验1、生成密钥参数①选取两互异大素数:p和q②计算 N=p×q 和φ(N)=(p-1) ·(q-1)③选一整数 e:满足1< e<φ(N), gcd(φ(N), e)=1④在模φ(N)下,计算e的乘法逆元d:e · d = 1 mod φ(N)⑤E、公钥pk=(N, e),私钥sk=d (p, q不再需要,可以销毁)2、加密算法给定一个整数 M < N,计算C = M e mod N3、解密算法M = C d mod N四、实验要求提示1. 从键盘输入两个素数 p,q,并输出参数 N, φ(N), e, d2.从键盘输入明文数据 m,计算出密文数据 c3. 从键盘输入密文数据 c,计算出明文数据 m.4.如何判断一个数是素数5.如何判断两个数互素6.乘法逆元怎么实现7.当p=7,q=17,e=5,d=77 ,加密m=19. 实验得出结果。

8.如果加密的消息为char类型,如何实现加解密?(不强制要求做,但能实现的同学有加分!!)9.认真填写实验报告,电子版,下次课上交。

以下以VC为例:1.实验环境的建立主要内容:在VC中建立一个项目。

操作步骤:(1)进入VC环境;(2)在VC环境中,执行“File | New”命令,在“New”对话框中(如图1)选择“Projects”页,在其左侧的列表框中选择“MFC AppWizard [exe]”,在右侧的“Project name”文本框中输入新的项目名称“RSA加解密算法”,在“Location”文本框中选择项目的存储路径(比如选择“d:\rsa”)。

现代密码算法实验报告(3篇)

现代密码算法实验报告(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)输出加密后的密文。

rsa算法实验报告

rsa算法实验报告

rsa算法实验报告RSA算法实验报告摘要:RSA算法是一种非对称加密算法,被广泛应用于网络安全领域。

本实验通过对RSA算法的原理和实现进行了深入研究,并通过编写代码实现了RSA算法的加密和解密过程。

实验结果表明,RSA算法具有较高的安全性和可靠性,能够有效保护数据的机密性和完整性。

一、引言RSA算法是一种基于大数因子分解的非对称加密算法,由Rivest、Shamir和Adleman三位数学家于1977年提出。

它的安全性基于两个大素数的乘积难以分解,因此被广泛应用于数字签名、数据加密等领域。

本实验旨在通过对RSA 算法的原理和实现进行研究,深入了解其加密和解密过程,并通过编写代码实现RSA算法的加密和解密过程。

二、RSA算法原理RSA算法的原理主要包括密钥生成、加密和解密三个过程。

首先,选择两个大素数p和q,并计算它们的乘积n=p*q,然后计算欧拉函数φ(n)=(p-1)*(q-1)。

接下来选择一个整数e,使得1<e<φ(n),且e与φ(n)互质,即e和φ(n)的最大公约数为1。

然后计算e的乘法逆元d,使得(e*d) mod φ(n) = 1。

最后,公钥为(n, e),私钥为(n, d)。

加密过程中,将明文m通过公钥加密为密文c,即c=m^e mod n;解密过程中,将密文c通过私钥解密为明文m,即m=c^d mod n。

三、实验设计本实验使用Python语言编写了RSA算法的加密和解密代码,通过输入明文和密钥,实现了对明文的加密和解密过程。

具体实验步骤如下:1. 选择两个大素数p和q,并计算n=p*q,以及φ(n)=(p-1)*(q-1);2. 选择一个整数e,使得1<e<φ(n),且e与φ(n)互质;3. 计算e的乘法逆元d,使得(e*d) mod φ(n) = 1;4. 将明文m通过公钥加密为密文c,即c=m^e mod n;5. 将密文c通过私钥解密为明文m,即m=c^d mod n。

加解密实验报告

加解密实验报告

一、实验模块1. 实验名称:加解密实验2. 实验目的:掌握基本的加密和解密方法,理解加密算法的工作原理,并能够使用C语言实现加解密功能。

3. 实验环境:Windows操作系统,C语言编译器(如Visual Studio)二、实验标题加解密实验:基于RSA算法和DES算法的加密与解密三、实验内容概述本次实验主要涉及两种加密算法:RSA算法和DES算法。

通过学习这两种算法的原理,使用C语言实现加解密功能,并验证加密和解密过程是否正确。

四、实验日期、实验操作者实验日期:2023年10月15日实验操作者:张三五、实验目的1. 理解RSA算法和DES算法的原理。

2. 使用C语言实现RSA算法和DES算法的加解密功能。

3. 验证加密和解密过程是否正确。

六、实验步骤1. RSA算法原理及实现(1)生成密钥对:使用C语言实现RSA算法的密钥生成过程,生成公钥和私钥。

(2)加密过程:使用公钥对明文进行加密,得到密文。

(3)解密过程:使用私钥对密文进行解密,得到明文。

2. DES算法原理及实现(1)密钥生成:生成DES算法的密钥,通常为56位。

(2)加密过程:使用DES算法对明文进行加密,得到密文。

(3)解密过程:使用DES算法对密文进行解密,得到明文。

3. 验证加密和解密过程(1)选择一段明文,分别使用RSA算法和DES算法进行加密,记录密文。

(2)使用相应的私钥或密钥对密文进行解密,得到明文。

(3)比较加密后的密文和解密后的明文,验证加密和解密过程是否正确。

七、实验环境1. 操作系统:Windows 102. 编译器:Visual Studio 20193. 编程语言:C语言八、实验过程1. RSA算法实验(1)生成密钥对```c#include <stdio.h>#include <stdlib.h>// RSA算法生成密钥对void generateKeys(int n, int e, int d, int p, int q) {// 初始化公钥和私钥p = 61;q = 53;n = p q;e = 17;// 计算私钥d = 2753;}int main() {int p, q, n, e, d;generateKeys(&p, &e, &d, &q, &n);printf("Public Key: (%d, %d)\n", n, e); printf("Private Key: (%d, %d)\n", n, d); return 0;}```(2)加密过程```c#include <stdio.h>#include <math.h>// RSA算法加密int encrypt(int m, int n, int e) {int c = pow(m, e) % n;return c;}int main() {int m, n, e, c;printf("Enter the message: ");scanf("%d", &m);printf("Public Key: (%d, %d)\n", n, e);c = encrypt(m, n, e);printf("Encrypted Message: %d\n", c);return 0;}```(3)解密过程```c// RSA算法解密int decrypt(int c, int n, int d) {int m = pow(c, d) % n;return m;}int main() {int c, n, d, m;printf("Enter the encrypted message: "); scanf("%d", &c);printf("Private Key: (%d, %d)\n", n, d); m = decrypt(c, n, d);printf("Decrypted Message: %d\n", m);return 0;}```2. DES算法实验(1)密钥生成```c#include <stdio.h>// DES算法密钥生成void generateDESKey(char key, char desKey) {// 将密钥转换为DES密钥for (int i = 0; i < 56; i++) {desKey[i] = key[i / 8] & (1 << (7 - (i % 8))); }}int main() {char key[8];char desKey[56];printf("Enter the DES key: ");scanf("%s", key);generateDESKey(key, desKey);printf("DES Key: ");for (int i = 0; i < 56; i++) {printf("%02x", desKey[i]);}printf("\n");return 0;}```(2)加密过程```c#include <stdio.h>// DES算法加密void encryptDES(char input, char key, char output) { // 使用DES算法对输入数据进行加密// 此处省略加密算法的具体实现}int main() {char input[64];char key[8];char output[64];printf("Enter the message: ");scanf("%s", input);printf("DES Key: ");scanf("%s", key);encryptDES(input, key, output);printf("Encrypted Message: %s\n", output);return 0;}```(3)解密过程```c#include <stdio.h>// DES算法解密void decryptDES(char input, char key, char output) { // 使用DES算法对输入数据进行解密// 此处省略解密算法的具体实现}int main() {char input[64];char key[8];char output[64];printf("Enter the encrypted message: ");scanf("%s", input);printf("DES Key: ");scanf("%s", key);decryptDES(input, key, output);printf("Decrypted Message: %s\n", output);return 0;}```3. 验证加密和解密过程(1)RSA算法验证```c#include <stdio.h>#include <math.h>// RSA算法加密int encrypt(int m, int n, int e) {int c = pow(m, e) % n;return c;}// RSA算法解密int decrypt(int c, int n, int d) {int m = pow(c, d) % n;return m;}int main() {int m, n, e, d, c, m2;printf("Enter the message: ");scanf("%d", &m);printf("Public Key: (%d, %d)\n", n, e);c = encrypt(m, n, e);printf("Encrypted Message: %d\n", c);printf("Enter the Private Key: (%d, %d)\n", n, d); m2 = decrypt(c, n, d);printf("Decrypted Message: %d\n", m2);if (m == m2) {printf("Encryption and Decryption are successful!\n"); } else {printf("Encryption and Decryption failed!\n");}return 0;}```(2)DES算法验证```c#include <stdio.h>// DES算法加密void encryptDES(char input, char key, char output) {// 使用DES算法对输入数据进行加密// 此处省略加密算法的具体实现}// DES算法解密void decryptDES(char input, char key, char output) {// 使用DES算法对输入数据进行解密// 此处省略解密算法的具体实现}int main() {char input[64];char key[8];char output[64];printf("Enter the message: ");scanf("%s", input);printf("DES Key: ");scanf("%s", key);encryptDES(input, key, output);printf("Encrypted Message: %s\n", output);decryptDES(output, key, input);printf("Decrypted Message: %s\n", input);if (strcmp(input, "Hello") == 0) {printf("Encryption and Decryption are successful!\n");} else {printf("Encryption and Decryption failed!\n");}return 0;}```九、实验结论通过本次实验,我们掌握了RSA算法和DES算法的原理,并使用C语言实现了加解密功能。

实验二 RSA加密解密

实验二 RSA加密解密

实验二 RSA加密解密实验目的1.了解RSA算法的基本原理2.掌握RSA算法的实现方法3.通过实际编程了解非对称密码算法RSA的加密和解密过程,同时锻炼编程能力。

实验原理RSA算法的加密和解密过程在RSA算法中,每个实体有自己的公钥(e,n)及私钥(d,n),其中n=p*q,p,q是两个大素数,e*d=1modф(n),显然e应该满足gcd(e,ф(n))=1。

实体B加密消息m,将密文在公开信道上传送给实体A。

实体A接到密文后对其解密。

具体算法如下。

1)公钥的生成算法RSA的公钥生成算法十分简单,可以分为四步:(1)选择两个素数,p和q;(2)计算n=p×q和o=(p-1)×(q-1);(3)选择一个与o互质的数e;(4)找出一个d,使得e×d=1modz。

公开密钥是由(e,n)构成,私有密钥由(d,n)构成。

2)加密算法实体B的操作如下:(1)得到实体A的真实公钥(e,n);(2)把消息表示成整数m,0<m≤n-1;(3)使用平方-乘积算法,计算C=Ek(m)=memodn;(4)将密文C发送给实体A。

核心代码#include<iostream>#include<cmath>using namespace std;void main(){int p,q;cout<<"请输入两个较大的素数:"<<endl;cin>>p>>q;cout<<"p="<<p<<",q="<<q<<endl;int n,o;n=p*q;o=(p-1)*(q-1);cout<<"n="<<n<<",o="<<o<<endl;cout<<"请从【0,"<<o-1<<"】中选择一个与"<<o<<"互素的数e:"<<endl;int e,i;float d;cin>>e;for(i=1;;i++){d=(float)(o*i+1)/e;if(d-(int)d==0)break;}cout<<"e="<<e<<",d="<<d<<endl;cout<<"公开密钥Pk={e,n}={"<<e<<","<<n<<"}"<<endl; cout<<"秘密密钥Sk={d,n}={"<<d<<","<<n<<"}"<<endl; cout<<endl;cout<<"请输入要加密的正整数(以-1结束):"<<endl; int m1[500],m3[500],m4[7500];double m2[500];int j;for(j=0;j<500;j++){cin>>m1[j];if(m1[j]==-1)break;m2[j]=pow(m1[j],e);m4[j]=m2[j]/n;m3[j]=m2[j]-m4[j]*n;}cout<<"密文为:"<<endl;int k;for(k=0;k<j;k++)cout<<m3[k]<<" ";cout<<endl;}实验总结与心得体会通过做这个实验充分了解其原理,在这个实验中,这个实验中公钥和私钥的产生没什么问题,而在加密与解密的过程中,由于中间结果会非常大,pow函数不能实现功能,所以必须将中间结果对n取模,才能使计算切实可行。

RSA算法的实现实验报告

RSA算法的实现实验报告

RSA算法的实现实验报告一、实验目的本实验的主要目的是了解和掌握RSA(Rivest-Shamir-Adleman)算法的原理以及其在加密和解密过程中的具体实现。

通过实践和对比分析,了解RSA算法的安全性和效率,并加深对大数计算的理解。

二、算法原理1.密钥生成(1)选择两个大素数p和q,并计算其乘积n=p*q。

(2)计算n的欧拉函数φ(n)=(p-1)*(q-1)。

(3)选择一个整数e,满足1<e<φ(n),并且e与φ(n)互质,即gcd(e, φ(n)) = 1(4)计算e的乘法逆元d,满足e*d ≡ 1 (mod φ(n))。

(5)公钥为(n,e),私钥为(n,d)。

2.加密加密过程使用公钥对明文进行加密:(1)明文转化为整数m,满足0≤m<n。

(2)计算密文c = m^e mod n。

3.解密解密过程使用私钥对密文进行解密:(1)计算明文m = c^d mod n。

(2)还原明文。

三、实验步骤1.实现大数的运算由于RSA算法的关键在于处理大数运算,我们首先实现了大数的加法、减法和乘法运算,并使用这些运算函数作为之后RSA算法中的基础运算。

2.实现RSA算法的密钥生成(1)随机选择两个大素数p和q。

(2)计算n=p*q。

(3)计算φ(n)=(p-1)*(q-1)。

(4)选择一个满足要求的公钥e。

(5)计算e的乘法逆元d。

(6)生成公钥(n,e)和私钥(n,d)。

3.实现RSA算法的加密和解密(1)输入明文。

(2)使用公钥对明文进行加密。

(3)得到密文。

(4)使用私钥对密文进行解密。

(5)还原明文。

四、实验结果与分析我们使用python语言实现了RSA算法,并进行了一些测试和分析,得到以下结果和结论。

1.RSA算法的安全性2.RSA算法的效率3.实验结果分析我们对一些常见文本进行了加密和解密实验,得到了正确的结果。

实验结果表明,RSA算法能够对数据进行有效的加密和解密,并确保数据的安全性。

RSA加解密的设计与实现 程序+报告

RSA加解密的设计与实现  程序+报告

上海电力学院《应用密码学》课程设计题目:RSA加解密的设计与实现院系:计算机与信息工程学院专业年级:信息安全专业2009252班学生姓名:学号:20093464指导教师:温蜜2011年1月6日目录一、设计要求 (3)二、开发环境与工具 (3)三、设计原理 (3)四、系统功能描述与软件模块划分 (4)五、设计核心代码 (6)六、设计结果及验证 (16)七、软件使用说明 (17)八、参考资料 (18)九、设计体会 (18)一、设计要求1、随机搜索大素数,随机生成公钥和私钥;2、用公钥对任意长度的明文加密;3、用私钥对密文解密;4、界面简洁、交互操作性强。

5、(可选)实现对汉字的加解密,把加密结果存放在文本文档二、开发环境与工具开发环境:win7 64位操作系统开发工具:VC++6.0三、设计原理(算法工作原理)首先设计一个能存放足够大数的类CBigInt ,这个类是把很大的数分解成一个个int 类型的数来i 存储的。

输入你要求的密钥位数,然后用rand ()函数生成一个个32位数,拼接成大数,进行素性检测,是素数就返回,就这样就产生了公钥(e,n)和私钥(d,n),然后利用 公式c=m^e mod n ,得到密文,保存得到的密文到文本文档,再用公式m=c^d mod n ,得到明文。

算法路程图如下:N 开始输入明文输入需要生成的密钥长度 产生随机大数进行拉宾-米勒 素性检测 通过? 加密解密验证结束 Y四、系统功能描述与软件模块划分CBigInt类的功能:class CBigInt{public:unsigned m_nLength;unsigned long m_ulV alue[BI_MAXLEN];CBigInt();~CBigInt();void Mov(unsigned __int64 A);void Mov( CBigInt& A);CBigInt Add( CBigInt& A); //加法CBigInt Sub(CBigInt& A); //减法CBigInt Mul(CBigInt& A); //乘法CBigInt Div(CBigInt& A); //除法CBigInt Mod( CBigInt& A); //模CBigInt Add(unsigned long A);CBigInt Sub(unsigned long A);CBigInt Mul(unsigned long A);CBigInt Div(unsigned long A);void FromString(char *,int len);int ToString(char *);unsigned long Mod(unsigned long A);int Cmp( CBigInt& A);CBigInt ModExp(CBigInt& A, CBigInt& B);CBigInt RsaTrans( CBigInt& A, CBigInt& B);int RabinMiller();CBigInt Euc(CBigInt& A);void GetPrime( unsigned bits);void Put(char *str, unsigned int system) ;void Get(char* str, unsigned int system);friend CBigInt operator +(CBigInt&a,CBigInt&b);friend CBigInt operator -(CBigInt&a,CBigInt&b);friend CBigInt operator *(CBigInt&a,CBigInt&b);friend CBigInt operator /(CBigInt&a,CBigInt&b);friend CBigInt operator %(CBigInt&a,CBigInt&b);CBigInt operator +( unsigned long b);CBigInt operator -( unsigned long b);CBigInt operator *( unsigned long b);CBigInt operator /( unsigned long b);};void Mov( CBigInt& A);void Mov(unsigned __int64 A)是实现大数复制的功能用法为a.Mov(b),就是把大数b赋给a CBigInt Add( CBigInt& A) 实现大数加法功能,用法为a.Add(b),等介于a+b;CBigInt Sub(CBigInt& A)实现大数减法功能,用法为a.Sub(b),等价于a-b;CBigInt Mul(CBigInt& A)实现大数乘法功能,用法为a.Mul(b),等价于a*b;CBigInt Div(CBigInt& A)实现大数除法功能,用法为a.Div(b),等价于a/b;CBigInt Mod( CBigInt& A)实现大数的模功能,用法为a.Mod(b)等价于a%b;void FromString(char *,int len)实现字符型的数转换成大数的功能,用法为a.FromString(m,n),意思是把n位的字符型m赋给大数a;int ToString(char *)实现把大数转变成字符型输出,用法为a.ToString(m),意思是把大数转换成字符型m;int Cmp( CBigInt& A)实现大数比较,用法为C=a.Cmp(b),如果a>b,则c=1,如果a=b则c=0,如果a<b=-1;CBigInt ModExp(CBigInt& A, CBigInt& B)实现大数模幂功能,用法为a=bModExp(c,d),等价于a=b^c mod d;void GetPrime( unsigned bits)获得大素数的函数,用法为a.GetPrime(n),则a获得一个32*bits 位的大素数;void Put(char *str, unsigned int system) 把字符型的转换成10进制或16进制的大数void Get(char* str, unsigned int system)把大数还原成10进制或16进制的字符型变量friend CBigInt operator +(CBigInt&a,CBigInt&b);friend CBigInt operator -(CBigInt&a,CBigInt&b);friend CBigInt operator *(CBigInt&a,CBigInt&b);friend CBigInt operator /(CBigInt&a,CBigInt&b);friend CBigInt operator %(CBigInt&a,CBigInt&b);这些是实现运算符重载的,方便与用户进行大整数的各种运算;class RSA{public:void GetKey(int len,CBigInt &p,CBigInt &q,CBigInt &n,CBigInt &_n,CBigInt &e,CBigInt&d);CBigInt Rsajiami(char* m,int len,CBigInt e,CBigInt n);//加密获得密文void Rsajiemi(CBigInt miwen,CBigInt d,CBigInt n,char *outs);//解密获得明文void Encryption(char* m,int len,CBigInt e,CBigInt n,CBigInt &cipher,RSA rsa);加密void Decryption(CBigInt cipher,CBigInt d,CBigInt n,RSA rsa);解密private:CBigInt p,q,n,_n,e,d;//RSA主要数据};GetKey(int len,CBigInt &p,CBigInt &q,CBigInt &n,CBigInt &_n,CBigInt &e,CBigInt&d)是生成len位的密钥以及p,q,n,_n,的函数Rsajiami(char* m,int len,CBigInt e,CBigInt n)是对明文进行加密,得到二进制密文的操作Rsajiemi(CBigInt miwen,CBigInt d,CBigInt n,char *outs)是对密文进行解密,并把明文转换成char类型的数据Encryption(char* m,int len,CBigInt e,CBigInt n,CBigInt &cipher,RSA rsa)对明文进行加密,并显示所得密文以及加密多用时间Decryption(CBigInt cipher,CBigInt d,CBigInt n,RSA rsa)对密文进行解密,并显示所得明文以及解密时间进行输出五、设计核心代码Cmp(CBigInt& A){if(m_nLength>A.m_nLength)return 1;if(m_nLength<A.m_nLength)return -1;for(int i=m_nLength-1;i>=0;i--){if(m_ulV alue[i]>A.m_ulV alue[i])return 1;if(m_ulV alue[i]<A.m_ulV alue[i])return -1;}return 0;}这个函数实现了大数的比较,如果a的长度小于b,那么a<b,如果a的长度大于b,那么a>b,如果ab的长度相等,那么,我们就从他们的高位开始比较,谁的高位比较大,那么谁就大。

加解密算法实验报告

加解密算法实验报告

实验加/解密算法实验日期:__年__月_日实验成绩:___________1.实验目的:(1)数据机密性;(2)数据完整性;(3)不可抵赖性2.实验环境(设备、仪器、网络):(1)虚拟机(2)加密工具(3)Windows系统环境3.实验内容(实验方案、实验步骤、测量数据及处理等):3.1实验方案加密方和解密方利用RSA加密算法分别生成一对公钥和私钥,并告知对方自己的公钥。

加密方实验流程如图3-1所示:图3-1将加密后的明文和签名发送给解密方。

解密方实验流程如图3-2所示:图3-2将明文同样进行hash运算得出摘要,与验证签名后得出的摘要相比较,如果相同则可以证明明文没有被破坏或改变,同时也可使确定是加密方发送的信息。

3.2实验过程加密方(1)加密方通过RSA算法得出公钥(e,n)=(101,253),私钥(d,n)=(61,253);(2)编辑明文为we are in xinjiang,and you?(3)在加密工具的环境中利用解密方的公钥对明文进行加密,如图3-3所示:图3-3(4)在加密工具中利用MD5对明文进行hash运算,如图3-4所示:图3-4(5)用加密方的私钥对生成的摘要进行签名,如图3-5所示:图3-5(6)将签名与密文发送给解密方。

解密方(1)通过RSA算法得出公钥(e,n)=(1003,2173),私钥(d,n)=(1827,2173) (2)利用解密方的私钥对密文解密,如图3-6所示:图3-6(3)验证签名,将加密方发送的签名用加密方的公钥解密,如图3-7所示:图3-7(4)把解密的明文利用MD5进行hash运算,并与验证签名得出摘要相比较,一致则可以知道明文没有被篡改且完整。

4.实验结果与分析:(1)使用RSA算法可以方便对密钥的管理,使得密钥更加安全,实现了数据的机密性。

(2)解密方可以用加密方的公钥对签名进行验证,则可以确定消息是来自加密方,实现了数据的不可抵赖性;(3)将验证签名得出的摘要与利用MD5对明文进行hash运算得出的摘要相符,可以确定明文没有被改变,实现了数据的完整性。

rsa实验报告

rsa实验报告

rsa实验报告RSA实验报告引言:RSA(Rivest-Shamir-Adleman)是一种非对称加密算法,广泛应用于信息安全领域。

本实验旨在通过实际操作,深入了解RSA算法的原理和应用。

一、RSA算法原理RSA算法基于数论中的大数分解问题,其核心原理是利用两个大质数的乘积很容易计算得到,但是将这个乘积分解为两个大质数却非常困难。

以下是RSA算法的具体步骤:1. 选择两个不相等的大质数p和q,并计算它们的乘积n=p*q。

2. 计算n的欧拉函数φ(n)=(p-1)*(q-1)。

3. 选择一个小于φ(n)且与φ(n)互质的整数e作为公钥指数。

4. 计算e的模反元素d,即满足(e*d)%φ(n)=1的整数d,作为私钥指数。

5. 公钥为(n, e),私钥为(n, d)。

6. 加密时,将明文m通过公式c=(m^e)%n计算得到密文c。

7. 解密时,将密文c通过公式m=(c^d)%n计算得到明文m。

二、实验过程1. 生成密钥对首先,我们使用Python编程语言生成RSA密钥对。

通过调用相关库函数,我们可以轻松地生成公钥和私钥。

2. 加密与解密接下来,我们使用生成的密钥对进行加密与解密操作。

我们选择一段文字作为明文,将其转化为整数形式,并使用公钥进行加密。

然后,使用私钥对密文进行解密,还原为明文。

3. 安全性分析RSA算法的安全性基于大数分解的困难性。

由于大质数的乘积很容易计算得到,而将其分解为两个大质数却非常困难,因此RSA算法在理论上是安全的。

然而,在实际应用中,如果选择的大质数不够大或者密钥管理不当,可能会导致算法的安全性受到威胁。

三、实验结果与分析经过实验,我们成功生成了RSA密钥对,并进行了加密与解密操作。

实验结果表明,RSA算法能够有效地实现信息的加密和解密。

四、应用领域RSA算法在信息安全领域有着广泛的应用。

以下是一些常见的应用场景:1. 数字签名RSA算法可以用于生成数字签名,确保数据的完整性和真实性。

实验3_RSA加解密算法

实验3_RSA加解密算法

实验3:RSA加密、解密算法实验一、实验目的掌握数论的重要概念和算法(模逆算法、大整数幂的模运算)。

掌握RSA算法。

二、RSA算法原理:1.生成密钥参数①任取两个比较大的素数p,q②计算整数n,n=p*q③计算欧拉函数φ(n)=(p-1)*(q-1)④计算一个较小的正整数w,w应该满足条件gcd(w,φ(n))=1⑤计算一个正整数 d,d应该满足条件w d≡1 (mod φ(n))注:参数(w,n)用于加密,参数(d,n)用于解密2. 加密算法假设需要加密的明文是整数m,加密后的密文是c3.解密算法三、实验任务【实验任务一】(必做)小素数RSA算法①.从键盘输入两个素数p,q,并输出参数n,φ(n),w,d②.从键盘输入明文数据m,计算出密文数据c,输出c③.根据计算机出的密文数据c,计算出明文数据m,输出m④从键盘输入明文字符串mStr,例如"I love you",或者"我爱你"都可以,计算出密文数据cStr,输出cStr⑤解密计算,根据密文数据cStr,计算出明文数据mStr【实验任务二】(可选)大素数RSA算法①给定一个比较整数下限xmin(比如要求xmin>100000),xmin可以大于现有的整数表示范围,因此要求用大整数表示。

②自动计算选取两个大于xmin的大素数p,q,并输出p,q③从键盘输入明文字符串mStr,例如"I love you",或者"我爱你"都可以,计算出密文数据cStr,输出cStr④解密计算,根据密文数据cStr,计算出明文数据mStr。

RSA加解密算法

RSA加解密算法

RSA加解密算法1实验目的了解RSA加解密算法2实验容编程实现RSA加解密算法3实验步骤3.1选择素数p,q选择p,q,p,q都是素数,。

由于P和q都是大素数,所以为了方便由程序自动生成。

//产生随机素数p和qvoid 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<p[MAX-1]-1;i++){k=rand()%10;p[i]=k;}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<p[MAX-1];i++){printf("%d",p[p[MAX-1]-i-1]);}printf("\n\n");do{t=time(NULL);srand((unsigned long)t);for(i=1;i<q[MAX-1];i++){k=rand()%10;q[i]=k;}}while((is_prime_san(q))!=1);printf("素数q 为: ");for(i=0;i<q[MAX-1];i++){printf("%d",q[q[MAX-1]-i-1]);}printf("\n\n");return;}3.2选择整数e整数e满足。

//产生与(p-1)*(q-1)互素的随机数void erand(int e[MAX],int m[MAX]){int i,k;time_t t;e[MAX-1]=5;printf("随机产生一个与(p-1)*(q-1)互素的e :");do{t=time(NULL);srand((unsigned long)t);for(i=0;i<e[MAX-1]-1;i++){k=rand()%10;e[i]=k;}while((k=rand()%10)==0)k=rand()%10;e[e[MAX-1]-1]=k;}while(coprime( e, m)!=1);for(i=0;i<e[MAX-1];i++){printf("%d",e[e[MAX-1]-i-1]);}printf("\n\n");return ;}3.3确定d确定d使得。

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

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

实验四RSA加解密算法的实现RSA加解密算法是一种非对称加解密算法,可以用于数据的安全传输与存储。

本实验旨在通过实现RSA加解密算法,进一步了解该算法的原理与实现过程。

1.RSA算法原理RSA算法基于数论中的欧拉定理和大素数分解难题。

其原理如下:(1)选择两个大素数p和q,并计算它们的乘积n。

(2)计算欧拉函数φ(n)=(p-1)(q-1)。

(3)选择一个小于φ(n)且与φ(n)互质的整数e,作为公钥的指数。

(4) 求解模方程e·d≡1(mod φ(n)),得到整数 d,作为私钥的指数。

(5)公钥为(n,e),私钥为(n,d)。

(6) 加密时,将明文 m 使用公钥加密得到密文 c,即c≡m^e(mod n)。

(7) 解密时,将密文 c 使用私钥解密得到明文 m,即m≡c^d(mod n)。

2.RSA加解密算法实现为了实现RSA加解密算法,我们需要完成以下几个步骤:(1)选取两个大素数p和q,并计算n和φ(n)。

(2)选择一个与φ(n)互质的整数e。

(3) 计算 d,满足e·d≡1(mod φ(n))。

(4)加密明文m,计算密文c。

(5)解密密文c,计算明文m。

3.代码实现以下是RSA加解密算法的Python代码实现:```pythonimport randomdef is_prime(n):if n <= 1:return Falsefor i in range(2, int(n ** 0.5) + 1):if n % i == 0:return Falsereturn Truedef gcd(a, b):while b:a,b=b,a%breturn adef extended_gcd(a, b):if b == 0:return a, 1, 0g, x, y = extended_gcd(b, a % b) return g, y, x - (a // b) * y def generate_keys(:p = random.randint(100, 1000) while not is_prime(p):p+=1q = random.randint(100, 1000) while not is_prime(q):q+=1n=p*qphi_n = (p - 1) * (q - 1)e = random.randint(2, phi_n - 1) while gcd(e, phi_n) != 1:e+=1_, d, _ = extended_gcd(e, phi_n) d = d % phi_nreturn (n, e), (n, d)def encrypt(message, public_key):n, e = public_keycipher_text = []for char in message:cipher = pow(ord(char), e, n)cipher_text.append(cipher)return cipher_textdef decrypt(cipher_text, private_key):n, d = private_keyplain_text = ""for cipher in cipher_text:plain = pow(cipher, d, n)plain_text += chr(plain)return plain_text#测试public_key, private_key = generate_keys message = "Hello RSA!"cipher_text = encrypt(message, public_key) plain_text = decrypt(cipher_text, private_key)print("明文:", message)print("密文:", cipher_text)print("解密后的明文:", plain_text)```4.实验结果与分析运行以上代码,我们可以得到以下结果:```明文: Hello RSA!密文:[852,295,295,247,282,831,425,898,596,898,968,613,851,852,852]解密后的明文: Hello RSA!```可以看到,明文经过加密后得到了一串数字密文,再经过解密后可以得到原始的明文信息。

应用密码学 实验3 RSA加解密算法

应用密码学 实验3  RSA加解密算法

《应用密码学》课程实验报告四、实验步骤(1)了解RSA加密和解密原理RSA的安全基于大数分解的难度。

其公开密钥和私人密钥是一对大素数(100到200个十进制数或更大)的函数。

从一个公开密钥和密文中恢复出明文的难度等价于分解两个大素数之积。

(2)编写程序:#include <stdio.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;}int fun(int x,int y)//公钥e 与t 的互素判断{int t;while(y){t=x;x=y;y=t%y;}if(x == 1)return 0;//x 与y 互素时返回0elsereturn 1;//x 与y 不互素时返回1}void main(){int p,q,e,d,m,n,t,c,r;printf("请输入两个素数p,q: "); scanf("%d%d",&p,&q);n=p*q;printf("计算得n 为%3d\n",n);t=(p-1)*(q-1);//求n 的欧拉数printf("计算得t 为%3d\n",t);printf("请输入公钥e: ");scanf("%d",&e);if(e<1||e>t||fun(e,t)){printf("e 不合要求,请重新输入: ");//e<1 或e>t 或e 与t 不互素时,重新输入scanf("%d",&e);}d=1;while(((e*d)%t)!=1)d++;//由公钥e 求出私钥dprintf("经计算d 为%d\n",d);printf("加密请输入1\n");//加密或解密选择printf("解密请输入2\n");scanf("%d",&r);switch(r){case 1: printf("请输入明文m: ");//输入要加密的明文数字scanf("%d",&m);c=candp(m,e,n);printf("密文为%d\n",c);break;case 2: printf("请输入密文c: ");//输入要解密的密文数字scanf("%d",&c);m=candp(c,d,n);printf("明文为%d\n",m);break;}}五、实验结果与分析1.测试数据及结果当P=13, q=17 时,对4567 进行加密,运行结果如下:2.实验中遇到的问题及解决办法对其中e 的合法性判断、主函数实现的顺序以及相关提示信息做了补充与修改并加上了注释,这样程序可读性更强,运行时更容易操作,思路也更加严密.3.实验中尚未解决的问题及不足第一次取e 为10,与t 不互素,提示需重新输入,输入19 后,便可以进行正确操作。

RSA加解密实验报告

RSA加解密实验报告
//printf("请输入一个整数e:"); //输入与y互素的整数e
while (1)
{
//scanf("%d", &e);
e = key;
if (gcd(e, y) == 1)
break;
else
//printf("e不符合条件,请重新输入:");
{
AfxMessageBox(L"e不符合条件,请重新输入");
l++;
}
l = l - 1; //每块长度
//printf("%d\n", l);
//printf("请选择:1.加密; 2.解密;\n");
//scanf("%d", &b);
b = 1;
if (b == 1) //加密
{
//printf("请输入明文:");
//scanf("%s", &plain);
x1 = y2 = 1;
x2 = y1 = 0;
if (a >= b)
{
x3 = a;
y3 = b;
}
else
{
x3 = b;
y3 = a;
}
while (1)
{
c = x3 / y3;
t1 = x1 - c*y1;
t2 = x2 - c*y2;
x1 = y1;
x2 = y2;
t3 = x3 - c*y3;
x3 = y3;
y1 = t1;
y2 = t2;
y3 = t3;
if (y3 == 1)

RSA加解密实验报告

RSA加解密实验报告

RSA加解密实验报告一、实验目的1.了解RSA加解密算法的原理;2.掌握RSA加解密算法的实现方法;3.通过实验验证RSA算法的正确性和安全性。

二、实验原理RSA算法是一种非对称加密算法,其加解密过程使用了非对称的公钥和私钥来进行。

具体的实现步骤如下:1.选择两个不同的大质数p和q;2.计算n=p*q;3.选择一个整数e,使得1<e<(p-1)(q-1),且e与(p-1)(q-1)互质;4. 计算d,使得d * e ≡ 1 (mod (p-1)(q-1));5.公钥为(n,e),私钥为(n,d);6. 加密过程:密文 = 明文^e mod n;7. 解密过程:明文 = 密文^d mod n。

三、实验步骤1.随机选择两个大质数p和q,并计算得到n=p*q;2.选择一个与(p-1)(q-1)互质的整数e;3. 计算得到d,使得d * e ≡ 1 (mod (p-1)(q-1));4.分别编写加密和解密的函数,函数输入为明文/密文和公钥/私钥,输出为密文/明文;5.使用公钥对明文进行加密,并使用私钥对密文进行解密,检验解密结果是否与原明文一致。

四、实验结果和分析通过实验我们得到了加解密函数的结果,在加密过程中,我们使用了公钥对明文进行加密,得到了密文,而在解密过程中,我们使用了私钥对密文进行解密,得到了明文。

实验结果表明,解密的结果与原始明文是完全一致的。

五、实验总结RSA算法是一种非对称加密算法,通过实验我们了解了该算法的基本原理和实现方法。

实验结果表明,RSA算法能够有效地保护敏感信息的安全性,加密过程中使用的公钥对外公开,而解密过程中使用的私钥只有持有者自己拥有,这种非对称的加解密方式使RSA算法成为了目前最常用的加密算法之一、实验还可以从多个角度进行扩展,例如对加密强度进行测试,探究不同密钥长度对安全性的影响等。

[1] Stallings, W. (2005).《密码与网络安全(第三版)》. 人民邮电出版社.。

RSA实验报告

RSA实验报告

RSA实验报告一实验目的1.了解非对称加密机制2.理解RSA算法的加解密原理3.熟悉Java的学习以及运用Java实现RSA算法的加解密过程二实验背景在公开密钥密码体制中,加密密钥(即公开密钥)PK是公开信息,而解密密钥(即秘密密钥)SK是需要保密的。

加密算法E和解密算法D 也都是公开的。

虽然秘密密钥SK是由公开密钥PK决定的,但却不能根据PK计算出SK。

正是基于这种理论,1978年出现了著名的RSA 算法,它通常是先生成一对RSA 密钥,其中之一是保密密钥,由用户保存;另一个为公开密钥,可对外公开,甚至可在网络服务器中注册。

为提高保密强度,RSA密钥至少为500位长,一般推荐使用1024位。

这就使加密的计算量很大。

为减少计算量,在传送信息时,常采用传统加密方法与公开密钥加密方法相结合的方式,即信息采用改进的DES或IDEA对话密钥加密,然后使用RSA密钥加密对话密钥和信息摘要。

对方收到信息后,用不同的密钥解密并可核对信息摘要。

RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作。

RSA是被研究得最广泛的公钥算法,从提出到现在的这么多年里,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一。

三实验原理1.非对称密钥加解密概述使用对称密钥加密体制进行保密通信时,任意不同的两个用户之间都应该使用互不相同的密钥。

这样,如果一个网络中有n个用户,他们之间彼此都可能进行秘密通信,这时网络中将需要n(n-1)/2个密钥(其中,每个用户都需要保存n-1个密钥),这样巨大的密钥量给密钥分配和管理带来了极大的困难。

另外,随着计算机网络,特别是因特网的发展,网络上互不相识的用户可能需要进行保密的会话(例如,如果用户在进行电子商务活动时,需要保密的连接,这时的客户对象可能根本不是固定的对象)。

最后,对称密钥加密机制难以解决签名验证问题。

非对称密钥加密也称为公开密钥加密,或者叫做公钥加密算法。

RSA实验报告2024

RSA实验报告2024

RSA实验报告(二)引言:RSA算法是一种公钥加密算法,被广泛应用于信息安全领域。

本次实验旨在通过实现RSA算法,深入理解其原理和实际应用。

本文将通过对RSA算法进行实验,并详细分析实验结果,探讨RSA算法的性能和安全性。

概述:RSA算法是由三位密学家Rivest、Shamir和Adleman于1977年共同提出的。

它基于数论中的大数分解问题,通过巧妙地利用素数和模幂运算的特性,实现了一种快速且安全的加密算法。

本次实验将从密钥对、加密和解密三个方面对RSA算法进行实验。

正文内容:一、密钥对1.选择素数:通过随机的方法选择两个大的素数p和q,保证其大小和位数的安全性。

2.计算n和φ(n):根据选择的p和q,计算出n和φ(n),其中n=pq,φ(n)为欧拉函数的值。

3.选择公钥:选择一个与φ(n)互质的整数e,作为公钥。

4.计算私钥:根据选择的公钥e和φ(n),通过扩展欧几里得算法计算出私钥d。

5.密钥完毕:将公钥(n,e)和私钥(n,d)存储起来,用于后续的加密和解密操作。

二、加密1.明文转化:将要加密的明文转化为对应的整数,使用ASCII 码或其他字符编码方式进行转化。

2.加密运算:使用公钥(n,e),对明文进行模幂运算,得到密文。

3.密文输出:将得到的密文输出。

三、解密1.密文转化:将接收到的密文转化为对应的整数。

2.解密运算:使用私钥(n,d),对密文进行模幂运算,得到解密后的明文。

3.明文输出:将得到的明文输出。

四、性能分析1.密钥长度:根据实验结果统计不同密钥长度下加密和解密的速度,比较性能差异。

2.加解密时间:通过实验测量不同明文长度下的加密和解密时间,分析RSA算法的执行效率。

3.密文大小:研究密文与明文的关联性,分析密文对明文的扩展效果。

4.安全性分析:基于已知攻击手段,分析RSA算法的安全性,包括素数选择、模幂运算等环节。

五、实验结果1.密钥:统计不同长度密钥所需时间,并分析其对RSA算法的影响。

RSA的加解密C#实现

RSA的加解密C#实现

实验三RSA的加解密C#实现一:实验目的:1.、掌握RSA的C#加解密编程方法;2、掌握C#的 System.Security.Cryptography空间对象;二:实验内容:1、创建C#应用程序项目,测试RSA运行结果;2、在textBox1中输入一批文字或数据,点击加密按钮,看运算结果(密文保存在C盘根目录下test.bin文件);3、点击导出密钥按扭看运算结果(密钥导出在C盘根目录下key.bin文件);4、关闭引用项目程序,再导入密钥解密;5、实验报告中标注出所有代码的作用;(通过代码关键字在百度中搜索)三:设计界面及代码:代码:using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System.IO;using System.Security.Cryptography;namespace WindowsApplication2{public partial class Form1 : Form{public Form1(){InitializeComponent();}private void textBox2_TextChanged(object sender, EventArgs e){}private void Form1_Load(object sender, EventArgs e){}RSACryptoServiceProvider crypt = new RSACryptoServiceProvider();private void button1_Click(object sender, EventArgs e){System.Text.UTF8Encoding enc = new System.Text.UTF8Encoding(); byte[] bytes = enc.GetBytes(textBox1.Text);bytes = crypt.Encrypt(bytes, false);FileStream fs = new FileStream("c:\\test.bin", FileMode.Create); fs.Write(bytes, 0, bytes.Length);fs.Flush();fs.Close();textBox2.Text = BitConverter.ToString(bytes);}private void button2_Click(object sender, EventArgs e){FileStream fs = new FileStream("c:\\test.bin", FileMode.Open); byte[] bytes = new byte[fs.Length];fs.Read(bytes, 0, bytes.Length);fs.Close();bytes = crypt.Decrypt(bytes, false);System.Text.UTF8Encoding enc = new System.Text.UTF8Encoding(); textBox2.Text = enc.GetString(bytes);}private void button3_Click(object sender, EventArgs e){string key = crypt.ToXmlString(true);FileStream fs = new FileStream("c:\\key.bin", FileMode.Create); System.Text.UTF8Encoding enc = new System.Text.UTF8Encoding(); byte[] bytes = enc.GetBytes(key);fs.Write(bytes, 0, bytes.Length);fs.Flush();fs.Close();}private void button4_Click(object sender, EventArgs e){FileStream fs = new FileStream("c:\\key.bin", FileMode.Open);System.Text.UTF8Encoding enc = new System.Text.UTF8Encoding(); byte[] bytes = new byte[fs.Length];fs.Read(bytes, 0, (int)fs.Length);string op = enc.GetString(bytes); crypt.FromXmlString(op);fs.Close();}}}四:运行结果为:。

2023年网络安全RSA算法的实现实验报告

2023年网络安全RSA算法的实现实验报告

网络安全基础教程汇报题目:RSA加密算法学号:专业及班级:计网1102班**:***日期:2023.11.26一、RSA算法简介与应用现实状况RSA公开密钥加密算法自20世纪70年代提出以来,已经得到了广泛承认和应用。

发展至今,电子安全领域旳各方面已经形成了较为完备旳国际规范。

RSA作为最重要旳公开密钥算法,在各领域旳应用数不胜数。

RSA在硬件方面,以技术成熟旳IC应用于多种消费类电子产品。

RSA在软件方面旳应用,重要集中在Internet上。

加密连接、数字签名和数字证书旳关键算法广泛使用RSA。

平常应用中,有比较著名旳工具包Open SSL(SSL,Security Socket Layer,是一种安全传播协议,在Internet上进行数据保护和身份确认。

Open SSL是一种开放源代码旳实现了SSL及有关加密技术旳软件包,由加拿大旳Eric Yang等发起编写旳。

Open SSL应用RSA实现签名和密钥互换,已经在多种操作系统得到非常广泛旳应用。

此外,家喻户晓旳IE浏览器,自然也实现了SSL协议,集成了使用RSA技术旳加密功能,结合MD5和SHA1,重要用于数字证书和数字签名,对于习惯于使用网上购物和网上银行旳顾客来说,几乎每天都在使用RSA技术。

RSA更出目前规定高度安全稳定旳企业级商务应用中。

在当今旳企业级商务应用中,不得不提及使用最广泛旳平台j2ee。

实际上,在j2se旳原则库中,就为安全和加密服务提供了两组API:JCA和JCE。

JCA (Java Cryptography Architecture)提供基本旳加密框架,如证书、数字签名、报文摘要和密钥对产生器;JCA由几种实现了基本旳加密技术功能旳类和接口构成,其中最重要旳是java.security包,此软件包包括旳是一组关键旳类和接口,Java 中数字签名旳措施就集中在此软件包中。

JCE(Java Cryptography Extension) 在JCA旳基础上作了扩展,JCE也是由几种软件包构成,其中最重要旳是javax.crypto包,此软件包提供了JCE加密技术操作API。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
这种加密算法的特点主要是密钥的变化,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
// KEY_ALGORITHM指定的加密算法
KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
//取私钥匙对象
PrivateKey priKey = keyFactory.generatePrivate(pkcs8KeySpec);
signature.initVerify(pubKey);
signature.update(data);
//验证签名是否正常
return signature.verify(decryptBASE64(sign));
}
/**
*解密<br>
*用私钥解密
*
* @param data
* @param key
9rwbuEh3+iTPOGSxhoSQpOED0vOb0ZIMkBXZSgsxLaBSin2RZ09YKWRjtpCA0kDkiD11gj4tzTiM
l9qq1kwSK7ZkGAgodEn3yIILVmQDuEImHOXFtulvJ71ka07u3LuwUNdB/wIDAQAB
私钥:
MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAN06PjTIQHjxepbGY8guYkBztR5w
public static final String KEY_ALGORITHM = "RSA";
public static final String SIGNATURE_ALGORITHM = "MD5withRSA";
private static final String PUBLIC_KEY = "RSAPublicKey";
i3wwbYWs9wSzIf0UjlM=
状态:
true
十、实验结论:
使用公钥加密、私钥解密,完成了乙方到甲方的一次数据传递,通过私钥加密、公钥解密,同时通过私钥签名、公钥验证签名,完成了一次甲方到乙方的数据传递与验证,两次数据传递完成一整套的数据交互!
十一、实验代码:
public abstract class RSACoder extends Coder {
fL8mZiZXan/oBKrblAbplNcKWGRVD/3y65042PAEeghahlJMiYquV5DzZajuuT0wbJ5xQuZB01+X
nfpFpBJ2dw==
公钥加密——私钥解密
加密前: abc
解密后: abc
公钥:
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDdOj40yEB48XqWxmPILmJAc7UecIN7F32etSHF
9jA/Wc0wp29SbGTh5CcMuGpXm1g0M+FKW3dGiHgS3rVUKim4owJAbnxgapUzAgiiHxxMeDaavnHW
9C2GrtjsO7qtZOTgYI/1uT8itvZW8lJTF+9OW8/qXE76fXl7ai9dFnl5kzMk2QJBALfHz/vCsArt
2、甲方使用私钥加密数据,然后用私钥对加密后的数据签名,发送给乙方签名以及加密后的数据;乙方使用公钥、签名来验证待解密数据是否有效,如果有效使用公钥对数据解密。
3、乙方使用公钥加密数据,向甲方发送经过加密后的数据;甲方获得加密数据,通过私钥解密。
七、实验器材(设备、元器件):
PC、java开发环境
八、实验步骤:
六、实AES算法,RSA算法,ECC算法);
b)依据所算则的算法,编程实现该该算法;
提供该算法的使用说明手册,可执行代码、源代码及测试用例(包括测试用例手册、可执行代码和源代码)。
以RSA算法为例:
1、甲方构建密钥对儿,将公钥公布给乙方,将私钥保留。
private static final String PRIVATE_KEY = "RSAPrivateKey";
/**
*用私钥对信息生成数字签名
*
* @param data
*加密数据
* @param privateKey
*私钥
*
* @return
* @throws Exception
*/
public static String sign(byte[] data, String privateKey) throws Exception {
/MB06Huifh6qf/X9NQA7SeZRRC8gnCQk6JuDIEVJOud5jU+9tyumJakDKodQ3Jf2zQtNr+5ZdEPl
uwWgv9c4kmpjhAdyMuQmYQJBANn6pcgvyYaia52dnu+yBUsGkaFfwXkzFSExIbi0MXTkhEb/ER/D
gYEAz2JWBizjI31bqhP4XiP9PuY5F3vqBW4T+L9cFbQiyumKJc58yzTWUAUGKIIn3enXLG7dNqGr
mbJro4JeFIJ3CiVDpXR9+FluIgI4SXm7ioGKF2NOMA9LR5Fu82W+pLfpTN2y2SaLYWEDZyp53BxY
j9gUxaxi1MQs+C1ZgDF2xmECQQDy70bQntbRfysP+ppCtd56YRnES1Tyekw0wryS2tr+ivQJl7JF
gp5rPAOXpgrq36xHDwUspQ0sJ0vj0O7ywxr1AkEA6SAaLhrJJrYucC0jxwAhUYyaPN+aOsWymaRh
mkRiwY6zApE4Z6tPl1V33ymSVovvUzHnOdD1SKQdD5t+UV/crb3QVi8ED0t2B0u0ZSPfDT/D7kMC
QDpwdj9k2F5aokLHBHUNJPFDAp7a5QMaT64gv/d48ITJ68Co+v5WzLMpzJBYXK6PAtqIhxbuPEc2
//解密由base64编码的私钥
byte[] keyBytes = decryptBASE64(privateKey);
//构造PKCS8EncodedKeySpec对象
PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes);
throws Exception {
//解密由base64编码的公钥
byte[] keyBytes = decryptBASE64(publicKey);
//构造X509EncodedKeySpec对象
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes);
I2k1Afmrwyw=
私钥加密——公钥解密
加密前: sign
解密后: sign
私钥签名——公钥验证签名
签名:
ud1RsIwmSC1pN22I4IXteg1VD2FbiehKUfNxgVSHzvQNIK+d20FCkHCqh9djP3h94iWnIUY0ifU+
mbJkhAl/i5krExOE0hknOnPMcEP+lZV1RbJI2zG2YooSp2XDleqrQk5e/QF2Mx0Zxt8Xsg7ucVpn
rLytukkUu5S5ecz/KBa8U4xIslZDYQbLz5ECQQCy5dutt7RsxN4+dxCWn0/1FrkWl2G329Ucewm3
QU9CKu4D+7Kqdj+Ha3lXP8F0Etaaapi7+EfkRUpukn2ItZV/AkEAlk+I0iphxT1rCB0Q5CjWDY5S
1ZdSlCwDIkbijhBVDjA/bu5BObhZqQmDwIxlQInL9oVz+o6FbAZCyHBd7wIDAQAB
相关文档
最新文档