Rabin加密

参考文档:http://www.cnblogs.com/iptables/p/5598049.html

                  http://www.jianshu.com/p/a81f5eaf445d

Rabin加密是一种基于模平方和模平方根的非对称加密算法。

a=x^2 mod m    称a为x模m时的平方,x为a模m时的平方根。


1、加密过程

设私钥p q为两个素数,公钥n=p*q,对于明文m和密文c,定义一下加密过程:

c=m^2 mod n


2、解密过程

根据以下公式计算出mp和mq:

mp = c^((1/4)(p+1)) mod p

mq = c^((1/4)(q+1)) mod q


根据以下公式推导出一个可用的yp和yq:

yp * p + yq * q = 1

根据以下公式计算最终结果:

r = (yp * p * mq + yq * q * mp) mod n

-r = n - r

s = (yp * p * mq - yq * q * mp) mod n

-s = n - s

可以证明每一个密文对应四个原文,而真正的原文一般需要根据验证码来对应。


CTF 中应用Rabin加密的题:https://www.jarvisoj.com/challenges (hardRSA)

解题思路:先用openssl解出参数,发现e=2,则说明用了Rabin加密,于是找脚本爆破即可。

c = int(open('flag.enc','r').read().encode('hex'),16)
#print c

p = 275127860351348928173285174381581152299
q = 319576316814478949870590164193048041239
n = p*q

mp = pow(c,(p+1)/4,p)
mq = pow(c,(q+1)/4,q)
yp = gmpy.invert(p,q)
yq = gmpy.invert(q,p)

a = (yp*p*mq + yq*q*mp)%n
b = n - int(a)
c = (yp*p*mq - yq*q*mp)%n
d = n - int(c)



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值