Re: [问题] RSA加解密程式

楼主: bleed1979 (十三)   2014-09-02 07:11:50
※ 引述《BombCat (炸弹猫)》之铭言:
: 各位版大好,原PO最近在书上看到RSA的介绍并参考网络资料
: C, M, D, E 为正整数, P和Q为质数
: M为要加密的数字, C则是加密后的数字
: RSA加密公式: C = M^E % (P*Q)
: RSA解密公式: M = C^D % (P*Q)
: 并且 D*E % ((P-1)*(Q-1)) = 1
: 写了一个RSA加解密程式,在P与Q都不大时,可以加解密运作正常。
: http://ideone.com/AM70Ot
: 但是,当P和Q都是六位数左右时,就没办法运作正常了
: 感觉是overflow,但是后来全部用 unsigned long long 还是一样的结果
: 看了一两天还是不知道问题在哪
: 不知道有没有版大有写过或是有类似经验可以提点,感谢!
: 目前没有打算要用大数运算来写,只是希望做个64bit的RSA
编辑:
刚想了一下,假设算式是对的。
I = (I * I) % (P * Q)
return I % (P * Q);
在P有6位,Q有6位的情况下,余可以为11位
11位乘以11位最高到22位
long long顶多20位,怎么看都不太够。
作者: scwg ( )   2014-09-02 11:47:00
上段的原因应该是正确的. 不过下面的更改没有改变任何东西ExponentBySquaring() 本来就保证结果 < P*Q; I%(P*Q) == I不想实作完整的大数的话, 把 I 拆成两个部份, 再各自平方,相乘, 对每个积 %(P*Q) 然后再加总
作者: BombCat (炸弹猫)   2014-09-02 19:53:00
谢谢b大和s大,原因应该就是这样,我再改改看。补推
作者: kerwinhui (kezza)   2014-09-02 20:15:00
也有一个危险的办法,%P,%Q分开算再用ChineseRemainderTheorem合并,但万一有bit-flip问题人家就破解了
作者: BombCat (炸弹猫)   2014-09-03 08:02:00
谢谢k大,我研究看看

Links booklink

Contact Us: admin [ a t ] ucptt.com