坏蛋是雷宾

问题

在这里插入图片描述

分析

题目告诉我们该加密算法是雷宾加密算法,通过查找了解到

加密过程:
  1. 随机选取两个足够大且两者的值接近的素数p,q
  2. N=p*q
  3. C=M2 %N(M为明文,C为密文)
解密过程:

在这里插入图片描述

第三个式子可以通过扩展欧几里得算法得到一组yp和yq,前两个式子直接算就行.
在得到了mp,mq,yp,yq之后,最终得到的明文有4个
在这里插入图片描述
因此往往还需要一个验证码来得到正确的明文.

decrypt

n=523798549
c=162853095
yz=110001
p=10663
q=49123#在线分解n得到p,q
import gmpy2
mp=gmpy2.powmod(c,(p+1)//4,n)
mq=gmpy2.powmod(c,(q+1)//4,n)
def exgcd(m, n, x, y):
    if n == 0:
        x = 1
        y = 0
        return (m, x, y)
    a1 = b = 1
    a = b1 = 0
    c = m
    d = n
    q = int(c / d)
    r = c % d
    while r:
        c = d
        d = r
        t = a1
        a1 = a
        a = t - q * a
        t = b1
        b1 = b
        b = t - q * b
        q = int(c / d)
        r = c % d
    x = a
    y = b
    return (d, x, y)
result=exgcd(p,q,0,0)
yp=result[1]
yq=result[2]
r=(yp*mq*p+yq*mp*q)%n
print(bin(r))
_r=n-r
print(bin(_r))
s=(yp*p*mq-yq*q*mp)%n
print(bin(s))
_s=n-s
print(bin(_s))
'''



'''

得到的结果是这样的:
在这里插入图片描述
结合题目告诉我们的验证码可以知道是第一条,把它截去后面的验证码部分,将前面的转换成10进制数然后通过md5加密就可以得到flag了
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值