我想在Python中试用RSA加密函数,但我的脚本在pyCharm中不起作用。有人可以解释一下我做错了什么吗? random.sample和random.choice给出了一个我相信的问题......
from functools import *
import _random
def inverse(e,m):
return filter(lambda d: e*d % m == 1, range(1, m))[0]
def sift(toRemove, numList):
'''Takes a number, toRemove, and a list of numbers, numList.
Returns the list of those numbers in numList that are not multiples of toRemove.'''
return list(filter(lambda x: x % toRemove != 0, numList))
def primeSieve(numberList):
'''Returns the list of all primes in numberList, using a prime sieve algorithm.'''
if numberList == []: # if the list is empty,
return [] # ...we're done
else:
prime = numberList[0] # The first element is prime!
return [prime] + primeSieve(sift(prime, numberList[1:]))
def makeEncoderDecoder():
p, q = _random.sample(primeSieve(list(range(2, 10))), 2)
n = p*q
m = (p-1)*(q-1)
print("Maximum number that can be encrypted is", n-1)
e = _random.choice(primeSieve(list(range(2, m))))
if m / e == 0:
print ("Please try again")
return
else:
d = inverse(e, m)
encoder = lambda x: (x**e)
decoder = lambda y: (y**d)
return [encoder, decoder]