'''
RSA算法,它通常是先生成一对RSA密钥,其中之一是保密密钥,由用户保存;
另一个为公开密钥,可对外公开,甚至可在网络服务器中注册。为提高保密强度,
RSA密钥至少为500位长,一般推荐使用1024位。这就使加密的计算量很大。
为减少计算量,在传送信息时,常采用传统加密方法与公开密钥加密方法相结合的方式,
即信息采用改进的DES或IDEA密钥加密,然后使用RSA密钥加密对话密钥和信息摘要。
对方收到信息后,用不同的密钥解密并可核对信息摘要。
1. 随意选择两个大的质数p和q,p不等于q,计算N=pq。
2. 根据欧拉函数,不大于N且与N互质的整数個数為(p-1)(q-1)。
3. 选择一个整数e与(p-1)(q-1)互质,并且e小于(p-1)(q-1)。
4. 用以下这个公式计算d:d× e ≡ 1 (mod (p-1)(q-1))。
5. 将p和q的记录销毁。
(N,e)是公钥,(N,d)是私钥。
+加密,解密
'''
import random
# 生成大的素数,将Miller进行k次,将合数当成素数处理的错误概率最多不会超过4^(-k)
def getprime():
Min = 10**152;Max = 10**154;p = 0
while(1):
p = random.randrange(Min, Max, 1)
# 这里进行素数验证
if MillerRabin(p, 20) == False:
continue
else:
return p
def fast_power(base, power, n):
result = 1
tmp = base
while power > 0:
if power&1 == 1:
result = (result * tmp) % n
tmp = (tmp * tmp) % n
power = power>>1
return result
# MillerRabin
def MillerRabin(n, iter_num):
# 2 is prime
if n == 2:
return True
# if n is even or less than 2, then n is not a prime
if n&1 == 0 or n<2:
return False
# n-1 = (2^s)m
m,s = n -
python实现RSA加密算法 1024位密钥
最新推荐文章于 2025-04-16 15:04:49 发布