RSA算法的简单实现

原理

(a): 我们取2个很大的质数 p,q,n=pq,w=(p1)(q1) .
(b): e<p,q,de=N(p1)(q1)+1,
(c): C,x=Cemodn,xdmodn=cdemodn
(d): ,cp1modp=1,cq1modq=1,cwmodn=1=cde1modn=1
(e):cdemodn=c(n,e),(n,d),,
(f) :回到(b),我们怎么求出来d?这里需要用到辗转相除法的变形来计算逆元,具体算法请查阅资料。

算法的简单实现:里面主要有一个辗转相除法的变形和快速求余的算法。

def rev_gcd(a,b):#计算逆元
    an,N = [],a
    while 1:
        divisior = a//b
        a,b = b,a%b
        if b==0:break
        an.append(divisior)
    b1,b2 = 1,0
    for ai in an[::-1]:b1,b2 = b1*ai+b2,b1
    if len(an)%2 ==0:return b1
    else:return N-b1
def create(p,q):
    n = p*q
    e = (p>>1)+(q>>1)
    x = (p-1)*(q-1)
    d = rev_gcd(x,e)
    return n,d,e
def rsa_endecode(c,e,n):#快速求余算法
    u = 1;
    while e:
        if e&1:u = (u*c)%n
        c = (c**2)%n
        e >>=1
    return u
n,d,e  = create(104729,15485863)
c = rsa_endecode(310,e,n)
print(c,rsa_endecode(c,d,n))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值