纪念第一次自己写的信息安全上机代码? 课本:信息安全原理与实践(第二版) 【美】Mark Stamp 著 张戈 【译】
#include<stdio.h> #include<stdlib.h> #include<math.h> main() { double N,e,d,M,C,S; int i; printf("请输入模数N:"); scanf("%lf",&N); printf("请输入加密指数e:"); scanf("%lf",&e); printf("请输入私钥d:"); scanf("%lf",&d); while(1) { printf("请选择(整数):1、加密\t2、解密\t3、数字签名\t4、数字签名验证\t5、退出\n"); scanf("%d",&i); if(i>5) printf("对不起,您输入的数据有误!\n"); switch(i) { case 1: { printf("请输入要加密的明文M (整数):\n"); scanf("%lf",&M); C=pow(M,e); C=fmod(C,N); printf("得到的密文为:\n%.0lf\n",C); }break; case 2: { printf("请输入要解密的密文C (整数):\n"); scanf("%lf",&C); M=pow(C,d); M=fmod(M,N); printf("得到的明文为:\n%.0lf\n",M); }break; case 3: { printf("请输入要签名的数字M (整数):\n"); scanf("%lf",&M); S=pow(M,d); S=fmod(S,N); printf("得到的签名为:\n%.0lf\n",S); }break; case 4: { printf("请输入要验证的签名S (整数):\n"); scanf("%lf",&S); M=pow(S,e); M=fmod(M,N); printf("验证得到的数字为:\n%.0lf\n",M); }break; case 5: { printf("已退出,感谢您的使用!\n"); return 0; }break; } } }运行结果: 来自一个小菜鸡的垃圾代码,不会函数调用,只好用switch函数了。 第一次知道还是同学推荐的,用了好久,感觉也应该留下点东西,万一就有人需要了呢,我总不能总是受人恩惠吧。
然后记录一下激动的心情吧~~(还找某同学墨迹了半天问题)~~ : 自己的代码可能比不上网上找的,但思路更清晰,也会发现一些单纯照抄程序发现不了的问题,比如实验2取余,一直知道取余用%,但是在这个题中,pow是double型,用int型的话数大了会出现错误,用double不能用%,在这里困了好长时间,新开程序实验了多次,同时试图在网上找寻一些解决方案,然后发现了一个函数fmod(),可以针对double型取余,然后又经历了多次报错,结果为零等状况,成功得到正确的结果。 不过,在程序中一点小小的错误就可能影响整个的运行结果,还是需要细致一些,像double型与%lf对应,不能用%d(%d输出可以用强制类型转换,例如,设变量double a;输出可以用int(a)输出%d形式的a)。还有在switch()函数中case 4后边的程序结束后忘了break;导致每次运行完4之后直接运行5,还以为是5的问题,改了半天,卒。
