RSA檔案加密工具

2021-10-03 03:08:01 字數 2538 閱讀 2757

1.對稱加密

採用單鑰密碼系統的加密方法,同乙個金鑰可以同時用作資訊的加密和解密,這種加密方法稱為對稱加密,也稱為單金鑰加密。

2.非對稱加密

需要兩個金鑰來進行加密和解密,這兩個金鑰是公開金鑰(public key,簡稱公鑰)和私有金鑰(private key,簡稱私鑰)。

1.rsa的由來

2023年,三位數學家rivest、shamir 和 adleman 設計了一種演算法,可以實現非對稱加密。這種演算法用他們三個人的名字命名,叫做rsa演算法。直到現在,rsa演算法一直是最廣為使用的"非對稱加密演算法"。毫不誇張地說,只要有計算機網路的地方,就有rsa演算法。

2.rsa的加解密公式

加密: 公鑰(e,n) 密文 = 明文^e % n

解密: 私鑰(d,n) 明文 = 密文^d % n

3.數學知識

素數(質數):除過1和本身,不能被其他數整除的數

互質數:公約數只有1的倆個數

兩個質數一定是互質數

乙個數是質數,另乙個數只要不是前者的倍數,兩者就構成互質關係,比如5和12

如果兩個數之中,較大的那個數是質數,則兩者構成互質關係,比如97和88

1和任意乙個自然數是都是互質關係,比如1和100

相鄰的兩個自然數是互質數,如 15與 16

相鄰的兩個奇數是互質數 ,如 49與 51

尤拉函式:尤拉函式是小於x的正整數中與x互質的數的數目。

例如:若m、n互質f(mn) = f(m)f(n) = (m-1)(n-1);

尤拉定理:如果倆個正整數a和n互質,則n的尤拉函式f(n)可以讓下列式子成立:

a ^ f(n) % n = 1 % n 即

a ^ f(n) % n = 1

模反元素(逆元):根據尤拉定理,如果倆個數互質,那麼一定可以找到乙個整數b,使得ab-1可以被整除,即ab%n=1。這時,b就叫做a的「模反元素」,或者稱為模的逆元

4.rsa金鑰產生的過程

隨機選擇倆個不相等的質數pq計算pq的乘積n,n=pq

計算n的尤拉函式f(n)隨機選擇乙個整數e1< e 計算e對於f(n)的模反元素d,使得(de)modf(n) = 1

產生公鑰(e,n),私鑰(d,n)

5.加密和解密

假設a給b傳送資訊m,m為加密資訊,首先要使用公鑰(e,n)進行加密。m必須是整數且m必須小於n。設加密後的資訊為c

加密:

c=m^e mod n

當b收到a傳送的訊息後使用私鑰(d,n)進行解密

解密

m=c^d mod n

6.rsa加密的安全性

rsa金鑰產生的過程中共產生6個值分別為 p,q,n,f(n),e,d。其中只有e,n是公開的,p和q一般會銷毀,d不能洩露。

而且由rsa產生金鑰的過程可知,只有知道e和f(n)才能求出d,而只有知道p,q才能知道f(n)。

而n=pq 所以只有將n因數分解,才能求出p和q。

但是當p和q是乙個大的素數時,從他們的積pq去分解因子p和q這是乙個目前還沒有解決的數學難題。目前已知被破解的最長的rsa金鑰也僅僅是768位,而在rsa演算法中一般都採用1024位的數字。因此rsa加密演算法時非常安全的。

7.使用場景

瀏覽器發起鏈結請求。

伺服器返回公鑰。

瀏覽器產生乙個對稱加密金鑰session key。

使用伺服器的公鑰加密此session key。

加密的session key 傳送給伺服器。

伺服器通過私鑰解密session key, 獲取明文密碼。

瀏覽器和伺服器的通訊現在通過session key 進行加密,進行安全通訊

ssh登入

遠端server收到client端使用者的登入請求,server把自己的公鑰發給使用者。

client使用這個公鑰,將密碼進行加密。

client將加密的密碼傳送給server端。

遠端server用自己的私鑰,解密登入密碼,然後驗證其合法性。

若驗證結果,給client相應的響應

RSA 加密檔案

獲取金鑰和公鑰 public void rsakey out string xmlkeys,out string xmlpublickey catch exception ex rsa的加密函式 public string rsaencrypt string xmlpublickey,string ...

RSA 加密檔案

獲取金鑰和公鑰 public void rsakey out string xmlkeys,out string xmlpublickey catch exception ex rsa的加密函式 public string rsaencrypt string xmlpublickey,string ...

RSA 加密檔案

獲取金鑰和公鑰 public void rsakey out string xmlkeys,out string xmlpublickey catch exception ex rsa的加密函式 public string rsaencrypt string xmlpublickey,string ...