RSA学习(入门)

在最近的SUCTF第一道逆向题中又一次地遇到了RSA解密的问题,所以这一次对RSA进行了一次比较彻底的学习
首先要掌握欧几里得算法和扩展欧几里得算法,先挂出大佬的博客

https://blog.csdn.net/weixin_42165981/article/details/81185418

这里本人用的python写的脚本
gcd
简单来说就是辗转相除求解最大公因数,代码中用到了地递归算法
他的最主要的原理就是gcd(a,b)=gcd(b,a%b),从而求出最大公因数,证明百度百科里面有这里不再赘余

ef gcd(x,y):
    if(x<y):
        temp=x
        x=y
        y=temp									//让大的一直在前面,不过好像没什么影响
    if(x%y==0):									//一直取模到可以整除为止
        return y
    return gcd(y,x%y)						

exgcd

def exgcd(a,b):
    if(b==0):
        return 1,0									//x=1,y=0
    if (a < b): a, b = b, a						//让大的在前面
    x,y=exgcd(b,a%b)						//进行递归
    return y,x-(a//b)*y						//x1=y2	y1=x1-[a/b]*y2

为了找出x,y满足ax+by = gcd(a, b)的贝祖公式,证明可以看大佬的博客
我们在求解rsa问题的时候求解时d=x%n

然后是rsa问题,逆向一般是遇到一个n一个公钥e然后求解d,再把密文转换成明文

n可以分解为两个质数的乘积,可以通过factordb得到p q

然后求解欧拉函数φ=(p-1)*(q-1)

然后求解d

原理是ed≡1(mod φ),即能够实现(ed-1)% φ ==0
等同于 (k
φ+1)%e==0 且 d =(k*φ+1)/e

这里我一共总结了两种代码方法

一. 爆破

def ddd(e,fi):
	i=1
	while(1):
		if	(((fi*i)+1)%e)==0:
			d=((fi*i)+1)/e
			print(i)
			return int(d)
		i+=1

二.辗转相除
通过exgcd求解出x,然后x%n得出d,代码在上面不再重复

然后就是密文转明文
c=m^d%n

python:

c=pow(m,d,n)

基本的RSA就是这样了,有很多有难度的破解的方法,因为不是密码学出身,所以这里也就先放一下,有必要的话,再去深入学习

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值