logo资料库

密码学实验报告——RSA(附代码、流程图、运行截图).docx

第1页 / 共11页
第2页 / 共11页
第3页 / 共11页
第4页 / 共11页
第5页 / 共11页
第6页 / 共11页
第7页 / 共11页
第8页 / 共11页
资料共11页,剩余部分请下载后查看
1.实验目的
2.实验任务
2.实验环境
3.程序设计及核心代码(可以画流程图进行辅助说明)
4.实验结果及软件使用说明
密码学 实验报告 实验 2. RSA 密码算法的设计与实现
1. 实验目的 通过实际编程了解非对称密码算法 RSA 的加密和解密过程,加深对非对 称密码算法的认识。 2.实验任务 (1)下载密码算法库,利用 RSA 算法,写一段用 RSA 加密文件的程序,运 行程序,加密一段文字,了解 RSA 算法原理; (2)加密一大段文字,记录程序的运行时间,使用 DES 算法加密相同的文 字,比较两种算法加密的速度。 2. 实验环境 信息楼西 505,WindowsXP,VC++6.0 平台 3. 程序设计及核心代码(可以画流程图进行辅助说明) (1) 变量定义说明: str[100]存储输入明文;unsigned gcd 无符号整型变量 gcd,做欧几里得扩展。 char s[100],*c; int n,e,d,i,C,j,k=0,len; int str[100],b[30]; unsigned gcd(unsigned a, unsigned b ) { if(a%b==0) return b; else return gcd(b,a%b); } (2) 主程序设计说明: 输入八位以上的初始明文,调用 RAS 函数提供私钥和公钥。读取用户选择操作进行加密、解密。 int main() {
int function(); int fc; printf("请输入初始明文(小写):"); gets(s); // puts(s); RSA(); //提供私钥和公钥 while(1) { fc=function(); if(fc==1) encrypt(); else if(fc==2) decrypt() ; else if(fc==3) break; else //加密 //解密 printf("输入有误,请重新输入!/n"); } return 0; } (3) 主程序设计说明: 3.1 系统功能选择页面 用户可输入 1/2/3,分别对应加密/解密/退出,并将选择结果记录在 choice 里,来调用加解密的函数。 int function()//系统功能选择页面 { int choice; printf("==============================================================\n"); printf(" \n"); printf(" \n"); printf(" printf(" \n"); printf("==============================================================\n"); printf("请输入要选择的功能号:"); scanf("%d",&choice); return choice; 欢迎进入 RSA 算法 1--加密 2--解密 3--退出 \n"); } 3.2 加密函数 首先先编写一个循环去掉明文中的空格,然后再加密其函数让其输出。 void encrypt() { //加密函数 len=strlen(s); //hgprintf("len=%d\n",len);
for(i=0;i122) { b[k]=i; k++; for(j=i;j
//加空格 c[i]=C+97; } c[i] = '\0'; // puts(c); for(int z=0;zi;j--) { c[j]=c[j-1]; } c[i]=' '; len++; b[z+1]=b[z+1]+(z+1); break; } } } c[len] = '\0'; printf("明文:"); puts(c); } 4. 实验结果及软件使用说明 RSA 算法的设计与实现:
图 4.1 RSA 算法运行结果 (1)输入初始明文,八位及以上。 (2)输入素数 p、q,回车产生其公钥和私钥。 (3) 进入 RSA 算法交互页面,输入 1 加密,输出密文与花费时间;输入 2,输 出明文与花费时间。 (4)使用 RSA 和 DES 算法加密同一段明文,发现时间差距并不大,0.021 秒和 0.022 秒,经过反思,可能是因为数据太小,所以效果并不明显。可以将 程序从文件读入,输入数据量比较多的明文再查看结果。 附:源代码 #include #include #include #include #include char s[100],*c; int n,e,d,i,C,j,k=0,len; int str[100],b[30]; unsigned gcd(unsigned a, unsigned b )
{ } if(a%b==0) return b; else return gcd(b,a%b); void Egcd(int a, int b,int &x, int &y) { //ax-by=1 if(b==0||a==0) { x=1; y=0; return ; } if(a
} } //printf("e=%d\n",e); Egcd(e,N,d,Y); // printf("d=%d Y=%d\n",d,Y); printf("公钥 PU={e=%d,n=%d}\n",e,n); printf("私钥 PR={d=%d,n=%d}\n",d,n); } void encrypt() { //加密函数 len=strlen(s); //hgprintf("len=%d\n",len); for(i=0;i122) { b[k]=i; k++; for(j=i;j
分享到:
收藏