Python實現RSA加密演算法

2021-08-30 02:41:42 字數 1672 閱讀 7237

基本思路在這裡說一下:

設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,計...