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...