RSA算法在python中的实现总是无法正确算出信息,请大神帮看下 2C

先贴个源代码,代码我是从网络上找的,他是能用的。我在想好像是python不支持32位以上的运算?所以在解码的时候溢出

 # -*- coding: cp936 -*-
# FileName:RSA Encode
# encode formula:(message**e) mod n = result
# uncode formula:(result**d) mod n = message
# prime key=d; public key=e,n

import random        
import numpy as np
import os

########################################################
def encode(message,e=1,n=2):
    result=np.mod(message**e,n)
    return result
#########################################################
def decode(result=5,key=1,n=2):
    print '密文:',result,'密钥:',key,'公钥:',n
    try1=result**key
    print 'message**key=',try1
    message=np.mod(try1,n)
    return message
#########################################################
def localset(pmin=3,pmax=10):
    plistcheck=[]        # 在取值范围内的非质数列表
    plist=[]             # 在取值范围内的质数列表
    local=[]
    # 获取一定范围内的质数
    for p1 in range(pmin,pmax):
        for i in range(2,p1/2):
            if np.mod(p1,i)==0:
                plistcheck=plistcheck+[p1]
                break
    for each in range(pmin,pmax):
        if each in plistcheck:
            pass
        else:
            plist=plist+[each]
    print plist
    #########################################################
    # 随机获取公钥n
    p1=random.choice(plist)
    p2=random.choice(plist)
    print 'p1=',p1
    print 'p2=',p2
    n=p1*p2
    f=(p1-1)*(p2-1)
    local=local+[n]
    print 'n=',n
    #########################################################
    # 设定一个公钥e
    e=3
    local=local+[e]
    print 'e=',e
    #########################################################
    # 计算密钥d
    k=0
    while np.mod((k*f+1),e)!=0:
        k=k+1
        if k>20000000:
            print 'k=',k
            print '出错!'
            os._exit(0)
    d=(k*f+1)/e
    local=local+[d]
    print 'd=',d
    return local
##############################################################
def main(message=89,pmin=5,pmax=15):
    local=localset(pmin,pmax)
    message=input('请输入你希望加密的信息:')
    Encrypted=encode(message,local[1],local[0])
    messagecheck=decode(Encrypted,local[2],local[0])
    print 'locallist=',local
    print 'message=',message
    print 'result=',Encrypted
    print 'messagecheck=',messagecheck
###############################################################

#暂定加密信息为
pmin=input('请输入最小值:')
pmax=input('请输入最大值:')
main(pmin=pmin,pmax=pmax)

1个回答

YoungQuant
YoungQuant 我比较想知道我这个算法为什么会不成功?能帮看看吗?
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问