RSA公钥加密算法实现
发布时间:2024-11-18
发布时间:2024-11-18
应用密码学RSA公钥加密算法实现的实验报告
西华大学计算机系上机实践报告
课程名称:应用密码学 指导教师:李曦
上机实践名称:RSA公钥加密算法实现 上机实践编号:实验二 年级:2008级 姓名:李伟 学组号:
号
:
312008080605331
上机实践时间:4学时 上机实践成绩:
上机实践日期:10-12-18
一、实验目的
1. RSA公钥加密算法实现。 二、实验内容与设计思想
1.输入两个素数,然后生成一个随机数,计算出随机数的逆元,然后保存这些信息。 2.选择加密,则输入明文,计算出密文。 3.选择解密,则输入密文,计算出明文。 三、使用环境
操作系统:Windows XP C++环境:Visual C++ 6.0
四、核心代码及调试过程
#include <stdio.h> #include <iostream.h> #include <math.h> #include <stdlib.h> #include <time.h> double jiben[6];
double qiuni(double e,double m); int jiami(double n,double e); int jiemi(double n,double d); void jibenxinxi() {
FILE *fp1;
cout<<"请输入素数p:"; cin>>jiben[0];
cout<<"请输入素数q:"; cin>>jiben[1];
jiben[2]=jiben[0]*jiben[1];
jiben[3]=(jiben[0]-1)*(jiben[1]-1); for(double d=0;d==0;){ srand(time(NULL));
jiben[4]=fmod(rand(),jiben[3]);
cout<<"生成一个随机数"<<jiben[4]<<endl;
应用密码学RSA公钥加密算法实现的实验报告
d=qiuni(jiben[4],jiben[3]); }
jiben[5]=d;
fp1=fopen("jibenxinxi","wb"); for(int i=0;i<6;i++)
if(fwrite(&jiben[i],sizeof(double),1,fp1)!=1) cout<<"file write error"<<endl; fclose(fp1); }
double qiuni(double e,double m) {
double X1,X2,X3,Y1,Y2,Y3,T1,T2,T3,Q; X1=1; X2=0; X3=m; Y1=0; Y2=1; Y3=e; for(;;){
if(Y3==0){ cout<<"这个随机数没有逆元,重新生成随机数"<<endl; return 0; }
else if(Y3==1){ if(Y2>0) cout<<"逆元是"<<Y2<<endl; else{ Y2=Y2+m; cout<<"逆元是"<<Y2<<endl; } return Y2; } else{ Q=floor(X3/Y3); T1=X1-Q*Y1; T2=X2-Q*Y2; T3=X3-Q*Y3; X1=Y1; X2=Y2; X3=Y3; Y1=T1;
应用密码学RSA公钥加密算法实现的实验报告
Y2=T2; Y3=T3; } } }
int jiami(double n,double e) {
FILE *fp1; int i;
double M,C;
if((fp1=fopen("jibenxinxi","rb"))!=NULL) for(i=0;i<6;i++){
fread(&jiben[i],sizeof(double),1,fp1); } else{
cout<<"不能打开文件或文件为空!"<<endl; return(0); }
n=jiben[2]; e=jiben[4];
cout<<"输入明文M:"; cin>>M; C=1;
for(i=0;i<e;i++){ C=C*M;
C=fmod(C,n); }
cout<<"计算出密文为:"<<C<<endl; return(1); }
int jiemi(double n,double d) {
FILE *fp1; int i;
double M,C;
if((fp1=fopen("jibenxinxi","rb"))!=NULL) for(i=0;i<6;i++){
fread(&jiben[i],sizeof(double),1,fp1); } else{
cout<<"不能打开文件或文件为空!"<<endl;
应用密码学RSA公钥加密算法实现的实验报告
return(0); }
n=jiben[2]; d=jiben[5];
cout<<"输入密文C:"; cin>>C; M=1;
for(i=0;i<d;i++){ M=M*C;
M=fmod(M,n); }
cout<<"计算出明文为:"<<M<<endl; return(1); }
void main() {
int ch; do{
cout<<"*****RSA公钥加密算法实现******"<<endl;
cout<<"1.输入基本信息并保存或者更新信息"<<endl; cout<<"2.加密"<<endl;
cout<<"3.解密"<<endl; cout<<"4.退出"<<endl;
cout<<"请选择:"<<endl; cin>>ch; switch(ch){
case 1:jibenxinxi();break;
case 2:jiami(jiben[2],jiben[4]);break; case 3:jiemi(jiben[2],jiben[5]);break;
case 4:cout<<"成功退出"<<endl<<endl;break;
default:cout<<"本菜单无此项服务,请重新输入!!!"<<endl;break; }
}while(ch!=4); }
应用密码学RSA公钥加密算法实现的实验报告
五、总结
通过这次上机作业,加深了我对RSA公钥加密算法的理解,在调试程序时,获得了许多经验。
上一篇:一种缸盖气门弹簧盖、锁片压装头