|
这个是一个RSA加密程序的片段,该RSA加密程序对小于100的数加密结果正确,对大于100的数加密结果有偏差。
跟踪了一下,提取了以下片段。是一个快速取模的运算。
返回值是M^e%n,也就是m的e次方,再模n。看起来像是整数运算溢出了。
1920^4519 mod 10403 = 10000,结果有问题,计算器无法计算的,1920是加密得到的,用计算器算过加密过程是对的,问题出在解密过程。
int kuaisuqumo(int m,int e,int n){
int i,j,t=0,c=1,b[15],len=0;
for(i=0;e!=0;i++){
b=e%2;
e=e/2;
len++;
}
for(j=i-1;j>=0;j--){
t=2*t;
c=(c*c)%n;
if(b[j]==1){
t+=1;
c=(c*m)%n;
}
}
return c;
}
int _tmain(int argc, _TCHAR* argv[]){
printf("%d ",kuaisuqumo(1817,4519,10403));//结果打印了9897,是正确的
printf( "%d",kuaisuqumo(1920,4519,10403) );//结果打印了10000,正确应该是10099
}
(原文件名:2.jpg)
(原文件名:3.jpg)
算法原理百度文库有介绍,不过看不太懂。http://wenku.baidu.com/view/cf2d6b651ed9ad51f01df21a.html
付上VC工程,哎,看了几个小时,找不到问题所在
VC工程ourdev_704457UXF0AJ.rar(文件大小:136K) (原文件名:RSA.rar) |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|