根据RSA加解密原理,不难写出RSA加密算法
虽然python中可以直接导入RSA库用于RSA应用、证书生成,这里只是单纯的从加解密算法本身实现
只用到了一个random库,为了演示和计算方便,选取的q和p的值限制在二位数100之内
并且应该使用扩展欧几里得算法得到d的值也是用简单的枚举
#author : AtomKid
#version : 1.0
import random
def is_prime(n):
if n == 2:
return True
for i in range(2, n/2+1):
if n%i == 0:
return False
return True
#get prime p and q
def get_pq():
p, q = 0, 0
while True:
p, q = random.randint(10, 100), random.randint(10, 100)
if is_prime(p) and is_prime(q) and p!=q :
return p,q
#get e and d
def get_ed(p,q):
phn = (p-1)*(q-1)
while True:
e = random.randint(2, 50)
if is_prime(e):
for d in range(2, 1000):
if e*d % phn == 1:
return e,d
p,q = get_pq()
n = p*q
e,d = get_ed(p,q)
print " public key: (n,e) =",(n,e)
print "private key: (n,d) =",(n,d)
m = random.randint(2, 100)
c = m**e%n
print "message m =",m
print "encrypt:\n c =",c
print "decrypt:\n m =",c**d%n
运行测试结果: