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
    关注
    评论

报告相同问题?

悬赏问题

  • ¥35 平滑拟合曲线该如何生成
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 自己瞎改改,结果现在又运行不了了
  • ¥15 链式存储应该如何解决
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站