YoungQuant 2017-05-21 15:47 采纳率: 0%
浏览 1054
已结题

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

先贴个源代码,代码我是从网络上找的,他是能用的。我在想好像是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条回答

  • devmiao 2017-05-21 15:53
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序