RSA演算法研究與PYTHON實現

2021-06-12 17:35:14 字數 2742 閱讀 3494

rsa演算法是一種非對稱密碼演算法,所謂非對稱,就是指該演算法需要一對金鑰,使用其中乙個加密,則需要用另乙個才能解密。

rsa的演算法涉及三個引數,n、e1、e2。

其中,n是兩個大質數p、q的積,n的二進位制表示時所占用的位數,就是所謂的金鑰長度。

e1和e2是一對相關的值,e1可以任意取,但要求e1與(p-1)*(q-1)互質;再選擇e2,要求(e2*e1)mod((p-1)*(q-1))=1。

(n,e1),(n,e2)就是金鑰對。其中 (n,e1)為公鑰,(n,e2)為私鑰。

rsa加解密的演算法完全相同,設a為明文,b為密文,則:a=b^e1 mod n;b=a^e2 mod n;

e1和e2可以互換使用,即:

a=b^e2 mod n;b=a^e1 mod n;

rsa用到的公式和定理

一、數和互為素數

任何大於1的整數a能被因式分解為如下唯一形式:

a=p1p2…pl(p1,p2,…,pl為素數)

二、模運算

①modn≡(a×b)(mod n)

②如果(a×b)=(a×c)(mod n),a與n互素,則

b=c(mod n)

三、費馬定理

若p是素數,a與p互素,則

a^(p-1)=1 mod p

四、尤拉定理

尤拉函式φ(n)表示不大於n且與n互素的正整數的個數。

當n是素數,φ(n)=n-1。n=pq,p,q均為素數時,則φ(n)= φ(p)φ(q)=(p-1)(q-1)。

對於互素的a和n,有a^φ(n)=1(mod n)

def isprime(number):

import math

i=2

sqrtnumber=int(math.sqrt(number))

for i in range(2, sqrtnumber+1):

if number%i == 0:

return false

i = i+1

return true

if __name__=="__main__":

print "*"*77

flag = false

while flag == false:

p = int(raw_input("please input a prime(p): "))

flag = isprime(p)

if flag == false:

print "what you input is not a prime!"

print "the p is: ", p

flag = false

while flag == false:

q = int(raw_input("please input a prime(q): "))

if p == q:

continue

flag = isprime(q)

if flag == false:

print "what you input is not a prime!"

print "the q is: ", q

n = p*q

print "the n is: ", n

t = (p-1)*(q-1)

print "the t is: ", t

print "*"*77

flag = false

while flag == false:

e = int(raw_input("please input a number(e): "))

if (e<1 or e>t):

continue

d=0

while (((e*d)%t) != 1):

d+=1

flag = true

print "the e is: ", e

print "the d is: ", d

print "the public key(e, n) is:", e, n

print "the private key(d, n) is:", d, n

print "*"*77

flag = false

while flag == false:

plaintext = int(raw_input("please input a plaintext: "))

if (plaintext < n):

flag = true

print "the plaintext is: ", plaintext

print "encrypt"+"."*7

ciphertext = (plaintext**e)%n

print "ciphertext is: ", ciphertext

print "decrypt"+"."*7

plain = (ciphertext**d)%n

print "the plain is: ", plain

print "*"*77

if plaintext == plain:

print "rsa test success."

else:

print "rsa test unsuccess!"

RSA演算法詳解與舉例

一 基礎 rsa演算法非常簡單,概述如下 找兩素數p和q 取n p q 取t p 1 q 1 取任何乙個數e,要求滿足e 取d e t 1 這樣最終得到三個數 n d e 設訊息為數m m 設c m d n就得到了加密後的訊息c 設m c e n則 m m,從而完成對c的解密。注 表示次方,上面兩式...

Perona Malik 演算法Python實現

最近正好在學習關於影象處理的東西,需要用到pm perona malik 演算法,所以就把自己的一些理解和 貼上來,希望能跟大家一起 pm演算法的具體原理可以網上查閱相關資料或者相關書籍,這裡只是簡要介紹大概的實現思路 一般而言,對乙個影象進行提取特徵之前,需要進行降噪濾波處理。最常用的應該是高斯濾...

Miller Rabin演算法 Python實現

用python實現了miller rabin的素性檢驗演算法 import random deflargeprime generate bit 1024 print generating large prime.i 1while true num random.randrange 2 bit 1 2...