在RSA加密算法中,当c^d mod n
和c
为大数时,如何计算d
?
答案 0 :(得分:3)
GMP是一个C / C ++软件库,可以为您完成此任务:文档中的mpz_powm,mpz_powm_ui。使用的方法(很大程度上)在the wikipedia page中进行了解释,您可以尝试阅读GMP的源代码,如果您对此感到满意......
答案 1 :(得分:0)
" powMod"操作可以缩小到更小的步骤。
例如,5 ^ 3 % 6
相等((5 * 5) % 6) * 5 % 6
,5 ^ 4 % 6
等于(((5 * 5) % 6) * 5 % 6) * 5 % 6)
。正如您所看到的,您可以在指数的子结果中应用模运算,以便始终使用较小的数字,从而即使c和d为高值,也可以更轻松地计算c ^ d % n
。
答案 2 :(得分:0)
简单的答案是:使用在“大整数”上实现算术的语言和/或库,并包括用于模幂运算的适当函数。在Java中,这意味着使用java.lang.BigInteger
,特别是方法modPow()
。
由于底层计算机无法真正处理“整数”,但其有限的仿真(例如“32位整数”表现得像整数,除了超过32位的高位被丢弃),这种“大整数”实现必须应用一些特定算法,在Handbook of Applied Cryptography(第14章)中详细描述。