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