搜索
bottom↓
回复: 6

数学不行,看到一段RSA加密程序,关于快速取模的,特来请教下,看了几个小时,搞不懂

[复制链接]

出0入0汤圆

发表于 2011-12-13 21:29:51 | 显示全部楼层 |阅读模式
这个是一个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, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2011-12-13 21:32:42 | 显示全部楼层
回复【楼主位】lihui_mc  软硬兼施
-----------------------------------------------------------------------
版面的代码格式都没缩进了,上传个图好看点

(原文件名:5.jpg)

出0入0汤圆

 楼主| 发表于 2011-12-13 21:39:01 | 显示全部楼层
搞错了,正确结果应该是99100,不过它返回了10000仍然是有问题的

出0入0汤圆

发表于 2011-12-13 23:19:52 | 显示全部楼层
回复【2楼】lihui_mc 软硬兼施
搞错了,正确结果应该是99100,不过它返回了10000仍然是有问题的
-----------------------------------------------------------------------

正确结果应该小于10403,所以99100肯定不正确.

出0入0汤圆

发表于 2011-12-13 23:29:14 | 显示全部楼层
貌似10000是正确的

http://acme.com/software/bigint/bic.cgi?expr=modpow%281920%2C4519%2C10403%29
===========================================================================
bic results

% bic
modpow(1920,4519,10403)
10000

Try another
===========================================================================
http://acme.com/software/bigint/

google "modular exponentiation calculator", 找个计算器先验证下吧~~

出0入0汤圆

 楼主| 发表于 2011-12-14 08:19:37 | 显示全部楼层
回复【4楼】root  菜鸟活化石
-----------------------------------------------------------------------

原来如此,谢谢提醒了,问题找到了呵,出错是出在数据分组,将97和98组合,结果是97*100+98=9798,而将99和100组合,结果是99*100+100=10000,溢出了,作者源程序只能支持两位10进制组合的,因此超过了100就溢出了。

出0入0汤圆

发表于 2011-12-28 21:07:24 | 显示全部楼层
MARK RSA
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 05:28

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表