RSA实践

编程入门 行业动态 更新时间:2024-10-26 08:34:30

<a href=https://www.elefans.com/category/jswz/34/1768564.html style=RSA实践"/>

RSA实践


在一次RSA密钥对生成中,假设p=473398607161,q=4511491,e=17
求解出d
将得到的d提交




解:
方法一:用工具工具 RSA-Tool 2 by tE!,
但是有人不会用哈哈,看来一篇用错了博客如图

得出结果278573880289078487不对,原因在于没有换好公钥进制工具默认是hex不是十进制
错图:


正确图已经附上答案:125631357777427553
正确图:



方法二:我用的是代码毕竟是菜几,用工具都是大牛。
但在用我之前的博客中RSA代码
中得出的是125631357777427552
后来找到原因:
>>> 2135733082216268401/17
1.2563135777742755e+17
>>> int(2135733082216268401/17)
125631357777427552
>>> 125631357777427552*17
2135733082216268384
代码算法没有问题主要由于类型强制转化导致失去精度

Python中的除法
>>> divmod( 2135733082216268401,17)
(125631357777427553, 0)
最后代码改了如下:
#from __future__ import division
#---------------------------------------------------------------
#分解大整数
import math#-------------------------------------
# 求欧拉函数f(n)
def getEuler(prime1, prime2):return (prime1-1)*(prime2-1)
#---------------------------------------------------------------------------------------
# 19d - 920071380k= 1
# 求私钥d
def getDkey(e, Eulervalue):#可以辗转相除法k = 1while True:if (((Eulervalue * k) + 1) % e) == 0:(d,m)=divmod(Eulervalue * k + 1,e)return d#避免科学计数法最后转int失去精度k += 1
#------------------------------------------------------
#求明文
def Ming(c,d,n):return pow(c,d,n)
#---------------------------------------------------------------------------------------
if __name__=='__main__':p=473398607161q=4511491d =getDkey(17, getEuler(p,q))print('私钥为: %d'%d)




更多推荐

RSA实践

本文发布于:2023-06-25 22:06:43,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/885035.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:RSA

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!