资源描述
。一、实验目的通过编程实现 RSA的加密和解密过程,加深对公钥(非对称)密码算法的认识。二、实验环境软件工具: Visual C+ 6.0操作系统 :windows xp三、实验思想公钥密码算法是指一个加密系统的加密密钥和解密密钥是不同的, 或者说不能用其中一个推导出另一个。 在公钥密码算法的两个密钥中, 一个是用于加密的密钥,它是可以公开的,称为公钥;另一个是用于解密的密钥,是保密的,称为私钥。公钥密码算法解决了对称密码体制中密钥管理的难题, 并提供了对信息发送人的身份进行验证的手段,是现代密码学最重要的发明。RSA 密码体制是目前为止最成功的公钥密码算法,虽然它的安全性还未能得到理论证明,但经过 20 多年的密码分析和攻击,迄今仍然被实践证明是安全的。RSA算法描述如下:1 公钥选择两 个互 异的大素 数 p 和q,n 是二 者的 乘积 , 即 n 二 pq 使D(n)=(p-1)(q-1), D(n) 为欧拉函数。随机选取正整数 e, 使其满足 gcd(e, (D(n)=1 ,即 e 和 D (n) 互质,则将 (n,e) 作为公钥。2. 私钥求出正数 d, 使其满足 e d=1 mod D (n),则将 (p,q,d)作为私钥。3. 加密算法对于明文 M,由 C=Me mod n,得到密文 C。4. 解密算法对于密文 C, 由 M=Cd mod n,得到明文 M如果窃密者获得了 n, e 和密文 C, 为了破解密文必须计算出私钥 d,为此需要先分解 n 为了提高破解难度, 达到更高的安全性, 一般商业应用要求 n 的长度不小于 1024 位,更重要的场合不小于2048 位。四、实验数据(源程序)#define MAX 100/数组的最大长度#define MARK (0-1)char* Addition(char a,char b);/ 实现加法char* Substraction(char a,char b);/ 实现减法,若abchar* Mode(char a,char b,char c);/ 实现取余运算 (ab) mod c void djs(char s);/ 生成大奇数 sint Rabin_Miller_Test(char s);/ 素数检验算法生成 100 位的奇数void djs(char s)/ 生成大奇数 sint i,j;srand(time(NULL); /修改随机数种子j=rand()%10;while(j=0)j=rand()%10;s0=j+0; /最高位不为0 保证产生的随机数有MAX位while(fmod(j,2)=0)j=rand()%10;sMAX-1=j+0;/最低位为奇数保证产生的随机数为奇数for(i=1;i=0)djs(a);j=0;strcpy(c,Mode(a,b,s);if(Compare(c,1)=0 | Compare(c,e)=0)return 1;loop:if(j0 & Compare(c,1)=0)return 0;j+;if(ji & Compare(c,e)!=0)strcpy(c,Mode(c,2,s);goto loop;if(Compare(c,e)=0)return 1;if(j=i & Compare(c,e)!=0)return 0;ab mod c 的快速算法char* Mode(char a,char b,char c)/ 实现取余运算 (ab) mod cchar a1MAX,b1MAX,c1MAX,d2*MAX,e2*MAX;int i;strcpy(a1,a);strcpy(b1,b);strcpy(c1,1);while(Compare(b1,0)!=0)if(fmod(b1strlen(b1)-1-0,2)=0)/b能够被 2 整除strcpy(b1,Division(b1,2);strcpy(d,Multiplication(a1,a1);if(Compare(d,c)0)。3。strcpy(a1,d);elsestrcpy(e,Division(d,c);strcpy(e,Multiplication(e,c);strcpy(d,Substraction1(d,e);for(i=0;istrlen(d);i+)a1i=di;a1i=0;else/b不能够被2 整除strcpy(b1,Substraction(b1,1);strcpy(d,Multiplication(c1,a1);if(Compare(d,c)0)strcpy(c1,d);elsestrcpy(e,Division(d,c);strcpy(e,Multiplication(e,c);strcpy(d,Substraction1(d,e);for(i=0;istrlen(d);i+)c1i=di;c1i=0;return c1;五、实验心得这个实验的算法实现根据课本较容易实现, 但真正掌握这个算法需要对算法进行深入的分析,这个算法的实现需要特别注意细节:例如:数据的导入,需将数据文件明确位置;明文字符的反向输出。4。欢迎您的下载,资料仅供参考!致力为企业和个人提供合同协议,策划案计划书, 学习资料等等打造全网一站式需求。5
展开阅读全文