RSA公钥加密算法实现

发布时间: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公钥加密算法的理解,在调试程序时,获得了许多经验。

RSA公钥加密算法实现.doc 将本文的Word文档下载到电脑

    精彩图片

    热门精选

    大家正在看

    × 游客快捷下载通道(下载后可以自由复制和排版)

    限时特价:7 元/份 原价:20元

    支付方式:

    开通VIP包月会员 特价:29元/月

    注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
    微信:fanwen365 QQ:370150219