加密和解密主要是為了實現能在訊息的接受方和訊息的傳送方之間在不安全的網路上面實現訊息的安全傳遞。怎麼才算安全傳遞?
那麼怎麼樣才能叫安全呢?訊息在接收方和傳送方進行安全傳遞,一般要滿足下面三個要點:
訊息的傳送方能夠確定訊息只有預期的接收方可以解密(不保證第三方無法獲得,但保證第三方無法解密)。
訊息的接收方可以確定訊息是由誰傳送的(訊息的接收方可以確定訊息的傳送方)。
訊息的接收方可以確定訊息在途中沒有被篡改過(必須確認訊息的完整性)。
加密通常分為兩種方式:對稱加密和非對稱加密,接下來我們先看看對稱加密。
一.對稱加密:
訊息的接受方和訊息的傳送方同時持有乙個私鑰,訊息的傳送方在傳送訊息的時候根據這個私鑰對訊息進行加密,而訊息的接受方通過這個私鑰對訊息進行解密。加密演算法通常是公開的。但是這種加密方式有乙個不足就是:雖然可以通過金鑰來保證訊息安全地進行傳遞,但是如何確保金鑰安全地進行傳遞?因為傳送者和接收者總有一次初始的通訊,用來傳遞金鑰,此時的安全如何保證?
.net提供的對稱加密類有:descryptoserviceprovider rc2cryptoserviceprovider rijndaelmanaged tripledescryptoserviceprovider.這些類都是一致的思路,定義乙個私有的key和乙個私有的iv,然後通過createencryptor和createdecryptor建立加密和解密類,對乙個byte 陣列進行加密和解密。
二.非對稱加密
這種加密方式是訊息的接收方和訊息的傳送方各自持有兩個金鑰,乙個是對外公開的,稱為公鑰,乙個是保密的,稱為私鑰。非對稱加密的規則是由某人a的公鑰加密的訊息,只能由a的私鑰進行解密;由a的私鑰加密的訊息只能由a的公鑰解密。
加密模式:使用接受者的公鑰和私鑰,訊息的接受者發布自己的接受訊息的公鑰,訊息的傳送者在傳送訊息的時候,使用訊息的接受者發布的公鑰對訊息進行加密,接受者在接受到訊息之後,使用自己的私鑰對訊息進行解密,這樣其他截獲訊息的人並不能對訊息進行解密。但是這種模式有一種不足。就是由於訊息接受方發布了自己的公鑰,因此其他人也可以使用這個公鑰對訊息進行加密然後傳送訊息,而訊息的接受方並不能對訊息進行識別。
認證模式:由訊息的傳送者通過自己的私鑰對訊息加密,然後發布公鑰,訊息的接受者使用訊息傳送者的公鑰對訊息進行解密。這種方式的不足之處顯而易見,傳送者發布公鑰,只要持有公鑰就能對訊息進行解密,因此這種模式不安全。
高階模式:由於這個過程比上面稍微複雜了一些,我們將其分為傳送方和接收方兩部分來看。先看看傳送方需要執行的步驟:
1.將訊息進行雜湊運算,得到訊息摘要。
2.使用自己的私鑰對訊息摘要加密(認證模式:確保了接收方能夠確認自己)。
3.使用接收方的公鑰對訊息進行加密(加密模式:確保了訊息只能由期望的接收方解密)。
4.傳送訊息和訊息摘要。
接下來我們看一下接收方所執行的步驟:
1.使用傳送方的公鑰對訊息摘要進行解密(確認了訊息是由誰傳送的)。
2.使用自己的私鑰對訊息進行解密(安全地獲得了實際應獲得的資訊)。
3.將訊息進行雜湊運算,獲得訊息摘要。
4.將上一步獲得的訊息摘要 和 第一步解密的訊息摘要進行對比(確認了訊息是否被篡改)。
可以看到,通過上面這種方式,使用了接收方、傳送方全部的四個金鑰,再配合使用訊息摘要,使得前面提出的安全傳遞的所有三個條件全都滿足了。那麼是不是這種方法就是最好的呢?不是的,非對稱加密是一種很耗時的操作,所以這個方案是很低效的。實際上,我們可以通過它來解決對稱加密中的金鑰傳遞問題,如果你已經忘記了可以翻到前面再看一看,也就是說,我們可以使用這裡的高階實現方式來進行對稱加密中金鑰的傳遞,對於之後實際的資料傳遞,採用對稱加密方式來完成,因為此時已經是安全的了。
.net提供的類有這兩個:dsacryptoserviceprovider rsacryptoserviceprovider
三.雜湊
上面講到的加密和解密可以把明文加密成密文,並且在某個特定的時候實現解密,將密文還原成明文。而雜湊實現的是另外一種思路,將明文雜湊演算法雜湊成一組密文,如使用md5演算法,雜湊演算法有三個重要的特徵:
1.不可逆,也就是明文雜湊成雜湊值後,雜湊值不能通過演算法在得出明文。
2.另外乙個是任意長的明文可以雜湊成指定長度的雜湊值。
3.如果明文稍微有改動,則雜湊出來的密文也會和原來有很大的差異,並且幾乎不可能找到不同的兩個明文能雜湊成同乙個雜湊值。
.net提供的雜湊類有:hmacsha1 mactripledes md5cryptoserviceprovider sha1managed sha256managed sha384managed sha512managed 這些類都是通過computehash方法對乙個byte陣列進行加密
參考文章:
加密和解密
public class desc public static string decode string data catch descryptoserviceprovider cryptoprovider new descryptoserviceprovider memorystream ms n...
加密和解密
公鑰密碼體制的核心思想是 加密和解密採用不同的金鑰。這是公鑰密碼體制和傳統對稱密碼體制的最大區別。對於傳統對稱密碼而言,密文的安全性完全依賴於金鑰的保密性,一旦金鑰洩露,將毫無保密性可言。但是公鑰密碼體制徹底改變了這樣狀況,在公鑰密碼體制中,公鑰是公開的,只有私鑰是保密的,知道公鑰和密碼演算法要推測...
加密和解密
目錄介紹 2.對稱加密和非對稱加密 3.關於單向加密 4.加密和解密 展示 5.rsa非對稱加解密 1.1 問答環節 1.2 加解密概況2.1 什麼是對稱加密 2.2 什麼是非對稱加密 2.3 常見對稱加密有什麼 2.4 常見非對稱加密有什麼 2.5 非對稱加密用途 陌生人通訊 支付寶支付加密 4....