基本思路在這裡說一下:
設p、q為質數
n = p*q
fn = (p-1)*(q-1)
要滿足: 1 < e < fn , 且 e 與 fn 互質
滿足: e*d%fn = 1 (d>1)
e 為公鑰 , d 為私鑰
把e 和 n 發給 客戶端
m 為明文
c = m^e%n
c 為密文
在把 c 發給伺服器
m = c^d%n
最後得到 m
rsa演算法講解
具體實現**如下:
# coding=utf-8
import random
num_list = list()
def ispns(x):
for j in range(2,x):
if (x % j == 0):
return false
return true
def ispn():
for i in range(3,10001):
if (ispns(i)):
print "已完成10000以內質數運算(1/6)"
def returned(fn):
fnpn = list()
for i in range(2,fn/2):
if(fn%i==0):
print "已完成fn所有因子運算(2/6)"
for i in range(fn - 1, 1, -1): ## 如果執行太久,可以把此處的for i in range(fn-1,1,-1): 替換成 for i in range(1,fn):
flag = true
for j in range(len(fnpn)):
if(i%fnpn[j] == 0):
flag = false
break
if(flag):
print "已完成e運算(3/6)"
j = 1
while true:
if(i*j%fn == 1):
print "已完成d運算(4/6)"
return i,j
j += 1
def disp():
ispn()
p = num_list[random.randint(0,(len(num_list))/2-1)]
q = num_list[random.randint(0,(len(num_list))/2-1) + len(num_list)/2]
n = p*q
fn = (p-1)*(q-1)
e,d = returned(fn)
m = 3 # 明文
c = m**e%n # 密文
print "已完成c運算(5/6)"
m = c**d%n # 通過c解出來的 明文
print "已完成m運算(6/6)"
print "p =",p,",q =",q,",n =",n,",fn =",fn,",e =",e,",d =",d,",c =",c,",m =",m
def main():
disp()
if __name__ == '__main__':
main()
RSA加密演算法
素數是這樣的整數,它除了能表示為它自己和1的乘積以外,不能表示為任何其它兩個整數的乘積。例如,15 3 5,所以15不是素數 又如,12 6 2 4 3,所以12也不是素數。另一方面,13除了等於13 1以外,不能表示為其它任何兩個整數的乘積,所以13是乙個素數。素數也稱為 質數 二 什麼是 互質數...
RSA加密演算法
演算法的描述 1.選取兩個素數p,q 2.計算n p q,fn p 1 q 1 3.選擇乙個整數e,使得e與fn的最大公約數為1,e將會用於對資料進行加密。4.計算出乙個整數d,使得d e除fn的餘數為1。d用於對密文進行解密,還原出明文。5.假設明文為m,密文為c。如果需要對原文進行加密,則進行如...
RSA加密演算法
一 rsa是公鑰加密演算法之一,該演算法的數學基礎是 1 初等數論的euler定理,即 若整數a與整數n互素,則a n 1 mod n 其中,n 為尤拉函式。2 大整數分解很困難,即給定乙個大整數n,將其分解為n p q,兩個素數乘積十分困難。二 rsa基本原理 1 金鑰的生成。選擇大素數p,q,計...