当前位置:编程学习 > 网站相关 >>

RSA加密算法

算法的描述:
 
1.选取两个素数p,q
 
2.计算n=p*q,fn=(p-1)*(q-1)
 
3.选择一个整数e,使得e与fn的最大公约数为1,e将会用于对数据进行加密。
 
4.计算出一个整数d,使得d*e除fn的余数为1。d用于对密文进行解密,还原出明文。
 
5.假设明文为m,密文为c。
 
如果需要对原文进行加密,则进行如下的计算
 
c= me mod n
 
如需将密文还原成明文,进行如下计算
 
m=cd mod n
 
6.假设p=101,q=103,则n=101*103=10403,fn=100*102=10200
 
e=7。因为7与10200的最大公约数为1。
 
d=8743。因为8743*7 mod 10200=1
 
(1)假设明文为一个整数73
 
则通过RSA加密后为
 
73^7%10403=7716
 
(2)还原出7716的原文
 
7716^8743%10403=73。
 
 
下面是杭电OJ上一道关于RSA的题目,题目中给出p,q和e的值,并给出一些加密之后的密文。要求还原出原来明文。题描述可参见http://acm.hdu.edu.cn/showproblem.php?pid=1211
 
下面是对RSA算法加密的密文进行还原的C代码
 
[cpp]  
#include<stdio.h>  
  
int main(){  
    int p,q,e;  
    int l,ch,i;  
    while(scanf("%d%d%d%d",&p,&q,&e,&l)!=EOF){  
        long long n=p*q;  
        long long fn=(p-1)*(q-1);  
        int d=1;  
        //暴力计算出d的值。使得d*e%fn=1  
        while((d*e)%fn!=1){  
            d++;  
        }  
        while(l--){  
            scanf("%d",&ch);  
            int result=1;  
            //计算 m^d%n的值,即明文  
            for(i=1;i<=d;i++){  
                result=(result*ch)%n;  
            }  
            printf("%c",result);  
        }  
        printf("\n");  
    }  
    return 0;  
}  
 
 
从上面的程序中可以看出,在还原明文中最重要的是计算出d的值。RSA算法在加解密过程都需要进行幂运算,现在为了RSA算法的安全,p和q的值一般都在100以
补充:综合编程 , 安全编程 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,