非對稱加密RSA的應用詳解

2021-09-06 08:03:20 字數 2859 閱讀 1214

一說到資料的加密,常常會涉及到這幾個單詞:演算法、原文、密文和金鑰。通常,傳送者把原文通過乙個加密的演算法,用金鑰進行加密後將密文傳送給接收者,然後接收者再用金鑰對密文進行解密,得到原文。由於常用的加密演算法都是公開的,所以,對原文的加密的關鍵,就是金鑰了。對於這種加解密都使用同樣的金鑰的演算法,我們稱之為對稱加密,對稱加密的代表演算法就是des家族了。那麼這種對稱加密有什麼缺陷呢?由於加解密使用相同的金鑰,那麼這個金鑰最少要儲存在兩個地方,如果加密的資料要發給多人,那麼就會有更多的人知道金鑰,這大大增加了金鑰洩露的風險;並且金鑰需要由傳送方傳遞給接收方,那麼如何保證金鑰的傳遞的安全,則成了另外乙個頭疼的事情。為了解決這個問題,相對於對稱加密,又出現了非對稱加密。

什麼是非對稱加密?所謂的非對稱加密,就是指加密和解密使用不同的金鑰的一類加密演算法。這類加密演算法通常有兩個金鑰a和b,使用金鑰a加密資料得到的密文,只有金鑰b可以進行解密操作(即使金鑰a也無法解密),相反,使用了金鑰b加密資料得到的密文,只有金鑰a可以解密。這兩個金鑰分別稱為私鑰和公鑰,顧名思義,私鑰就是你個人保留,不能公開的金鑰,而公鑰則是公開給加解密操作的另一方的。根據不同用途,對資料進行加密所使用的金鑰也不相同(有時用公鑰加密,私鑰解密;有時相反用私鑰加密,公鑰解密)。非對稱加密的代表演算法是rsa演算法。

那麼非對稱加密到底有哪些用途?

第乙個用途當然是做資料加密。

請大家想象一下,如果我不想讓除了接收方以外的其他人,知道我傳送的資料的內容的話,需要用哪種金鑰對資料進行加密?如果我使用私鑰加密,那麼根據非對稱加密的原理,接收方需要使用公鑰來解密,而公鑰我已經公開給接收方了,這個方案似乎是可行的,可是這樣做問題就出現在公鑰上了。在非對稱加密中,公鑰的公開不僅僅指對接收方的公開,而是指這個金鑰徹底的公開,任何人需要都可以得到,這樣的話你傳送的資料就沒有任何秘密可言了。反過來,如果我使用公鑰對資料加密,那麼對於接收方來說就需要使用私鑰進行資料解密,由於私鑰只儲存在接收方手中,這樣其他人就不會得到資料的內容了。這樣看來,在非對稱加密中,如果需要保護你的資料不被第三者得到,金鑰需要由接收方產生,然後接收方將公鑰公開出去,傳送方使用這個公開的公鑰對資料進行加密後傳輸給接收方,接收方使用自己的私鑰進行解密,從而保證了資料的安全性。所以非對稱加密又稱為公鑰加密。

非對稱加密的執行效率要遠低於對稱加密,所以我們不會對乙個大的檔案或資料使用非對稱加密演算法。那麼我們如何加密乙個大的檔案呢?通常情況我們可以選擇對稱加密演算法加密檔案,然後使用非對稱演算法加密對稱演算法的金鑰,這樣就保證了對稱演算法金鑰傳遞的安全性。

非對稱加密的另外乙個用途就是用來進行數字簽名。

什麼是數字簽名?數字簽名同我們在合同上的簽字一樣,接收方可以用它來證明收到的資料或檔案是由你傳送的。舉個例子:假設傳送方需要將一串資料d傳送給接收方,那麼接收方如何判斷資料d是傳送方傳送的呢?

step 1:傳送方先產生成一對金鑰,並將公鑰公開給接收方;

step 2:傳送方將資料d用私鑰進行加密得到密文m,然後將資料d和密文m一起傳送給接收方;

step 3:接收方得到資料d和密文m後,用公鑰將密文m解密得到d;

step 4:比較d和d,相等則證明d是由傳送方傳送的。

在實際的操作中,我們並不會直接用私鑰去加密要傳送的資料或檔案,這是因為非對稱加密的演算法非常耗時並且密文的長度要大於明文的長度,直接加密系統的開銷非常大。那麼如何實解決這個問題呢?

首先,我們需要了解另外乙個概念:訊息摘要。所謂的訊息摘要就是通過一種單向演算法計算出來的唯一對應乙個檔案或資料的固定長度的值,也被稱作數字摘要。根據不同的演算法,訊息摘要的長度一般為128位或160位。常用的訊息摘要的演算法有md5和sha1。乙個檔案的訊息摘要就同乙個人的指紋一樣,它可以唯一代表這個檔案,如果這個檔案被修改了,那麼它的訊息摘要也一定會發生變化,所以,我們可以通過對乙個檔案的訊息摘要進行簽名來代替對它本身進行簽名。並且,我們還可以通過驗證訊息摘要,來確定傳送的資料是否完整或曾經被修改過。這樣,上面的例子大致可以變為下面這樣:

step 1:傳送方先產生成一對金鑰,並將公鑰公開給接收方;

step 2:傳送方將資料d進行訊息摘要,得到q;

step 3:用私鑰對q進行加密得到密文mq,然後將資料d和密文mq一起傳送給接收方;

step 4:接收方得到資料d和密文mq後,用公鑰將密文mq解密得到q1;

step 5:接收方使用相同的演算法對資料d進行訊息摘要,得到q2;

step 6:比較q1和q2,相等則證明d是由傳送方傳送的,且沒有被修改過。

好了,非對稱加密的使用介紹了一大堆,後面我們來看看如何用c#來實現rsa非對稱加密。

.net中的加密操作所涉及的物件都在命名空間system.security.cryptography下,所以請先在你的程式中新增using system.security.cryptography; 其中,rsa加密演算法由rsacryptoserviceprovider物件實現。下面的**分別實現了資料的加密解密和簽名與驗證。

string publickey, privatekey;

2: rsacryptoserviceprovider rsaprovider;
3:

void initial()

4:
23:
24:

byte decryptdata(byte data)

25:
32:
33:

byte sign(byte data)

34:
41:
42:

bool verify(byte data, byte signature)

43:

另外希望大家到網上查查rsa的具體演算法,非常有意思,並且非常佩服設計出這些演算法的人,真不知道他們的腦袋裡裝的都是什麼~~

非對稱加密RSA的應用詳解

一說到資料的加密,常常會涉及到這幾個單詞 演算法 原文 密文和金鑰。通常,傳送者把原文通過乙個加密的演算法,用金鑰進行加密後將密文傳送給接收者,然後接收者再用金鑰對密文進行解密,得到原文。由於常用的加密演算法都是公開的,所以,對原文的加密的關鍵,就是金鑰了。對於這種加解密都使用同樣的金鑰的演算法,我...

Crypto 應用 非對稱加密RSA

1,非對稱加密rsa 1 乙方生成兩把金鑰 公鑰和私鑰 公鑰是公開的,任何人都可以獲得,私鑰則是保密的。2 甲方獲取乙方的公鑰,然後用它對資訊加密。3 乙方得到加密後的資訊,用私鑰解密。2,使用cryptopp實現rsa cryptopp是一套非常完整的加密解密開源解決方案,如何使用這裡就不多說了,...

RSA非對稱加密

現實網路中,web應用的開發少不了需要對敏感資訊來進行加密,但是加密又不能草草了事,過於簡單。一旦被鑽了空子,就成了事故。比如密碼。之前用到了非對稱加密沒做記錄,這次又用到了,所以記錄下來!rsa是目前最有影響力的公鑰加密演算法,該演算法基於乙個十分簡單的數論事實 將兩個大素數相乘十分容易,但那時想...