亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C#對稱加密與非對稱加密實例

2020-01-24 02:20:36
字體:
來源:轉載
供稿:網友

本文實例講述了C#對稱加密與非對稱加密的原理與實現方法,分享給大家供大家參考。具體分析如下:

一、對稱加密(Symmetric Cryptography)

對稱加密是最快速、最簡單的一種加密方式,加密(encryption)與解密(decryption)用的是同樣的密鑰(secret key)。對稱加密有很多種算法,由于它效率很高,所以被廣泛使用在很多加密協議的核心當中。

對稱加密通常使用的是相對較小的密鑰,一般小于256 bit。因為密鑰越大,加密越強,但加密與解密的過程越慢。如果你只用1 bit來做這個密鑰,那黑客們可以先試著用0來解密,不行的話就再用1解;但如果你的密鑰有1 MB大,黑客們可能永遠也無法破解,但加密和解密的過程要花費很長的時間。密鑰的大小既要照顧到安全性,也要照顧到效率,是一個trade-off。

2000年10月2日,美國國家標準與技術研究所(NIST--American National Institute of Standards and Technology)選擇了Rijndael算法作為新的高級加密標準(AES--Advanced Encryption Standard)。.NET中包含了Rijndael算法,類名叫RijndaelManaged,下面舉個例子。

加密過程:

復制代碼 代碼如下:
private string myData = "hello";
private string myPassword = "OpenSesame";
private byte[] cipherText;
private byte[] salt = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x5, 0x4, 0x3, 0x2, 0x1, 0x0 };
   

private void mnuSymmetricEncryption_Click(object sender, RoutedEventArgs e)
{
    var key = new Rfc2898DeriveBytes(myPassword, salt);
    // Encrypt the data.
    var algorithm = new RijndaelManaged();
    algorithm.Key = key.GetBytes(16);
    algorithm.IV = key.GetBytes(16);
    var sourceBytes = new System.Text.UnicodeEncoding().GetBytes(myData);
    using (var sourceStream = new MemoryStream(sourceBytes))
    using (var destinationStream = new MemoryStream())
    using (var crypto = new CryptoStream(sourceStream, algorithm.CreateEncryptor(), CryptoStreamMode.Read))
    {
 moveBytes(crypto, destinationStream);
 cipherText = destinationStream.ToArray();
    }
    MessageBox.Show(String.Format("Data:{0}{1}Encrypted and Encoded:{2}", myData, Environment.NewLine, Convert.ToBase64String(cipherText)));
}
private void moveBytes(Stream source, Stream dest)
{
    byte[] bytes = new byte[2048];
    var count = source.Read(bytes, 0, bytes.Length);
    while (0 != count)
    {
 dest.Write(bytes, 0, count);
 count = source.Read(bytes, 0, bytes.Length);
    }
}

解密過程:

復制代碼 代碼如下:
private void mnuSymmetricDecryption_Click(object sender, RoutedEventArgs e)
{
    if (cipherText == null)
    {
 MessageBox.Show("Encrypt Data First!");
 return;
    }
    var key = new Rfc2898DeriveBytes(myPassword, salt);
    // Try to decrypt, thus showing it can be round-tripped.
    var algorithm = new RijndaelManaged();
    algorithm.Key = key.GetBytes(16);
    algorithm.IV = key.GetBytes(16);
    using (var sourceStream = new MemoryStream(cipherText))
    using (var destinationStream = new MemoryStream())
    using (var crypto = new CryptoStream(sourceStream, algorithm.CreateDecryptor(), CryptoStreamMode.Read))
    {
 moveBytes(crypto, destinationStream);
 var decryptedBytes = destinationStream.ToArray();
 var decryptedMessage = new UnicodeEncoding().GetString(
 decryptedBytes);
 MessageBox.Show(decryptedMessage);
    }
}

對稱加密的一大缺點是密鑰的管理與分配,換句話說,如何把密鑰發送到需要解密你的消息的人的手里是一個問題。在發送密鑰的過程中,密鑰有很大的風險會被黑客們攔截。現實中通常的做法是將對稱加密的密鑰進行非對稱加密,然后傳送給需要它的人。

二、非對稱加密(Asymmetric Cryptography)

非對稱加密為數據的加密與解密提供了一個非常安全的方法,它使用了一對密鑰,公鑰(public key)和私鑰(private key)。私鑰只能由一方安全保管,不能外泄,而公鑰則可以發給任何請求它的人。非對稱加密使用這對密鑰中的一個進行加密,而解密則需要另一個密鑰。比如,你向銀行請求公鑰,銀行將公鑰發給你,你使用公鑰對消息加密,那么只有私鑰的持有人--銀行才能對你的消息解密。與對稱加密不同的是,銀行不需要將私鑰通過網絡發送出去,因此安全性大大提高。

目前最常用的非對稱加密算法是RSA算法,是Rivest, Shamir, 和Adleman于1978年發明,他們那時都是在MIT。.NET中也有RSA算法,請看下面的例子:

加密過程:

復制代碼 代碼如下:
private byte[] rsaCipherText;
private void mnuAsymmetricEncryption_Click(object sender, RoutedEventArgs e)
{
    var rsa = 1;
    // Encrypt the data.
    var cspParms = new CspParameters(rsa);
    cspParms.Flags = CspProviderFlags.UseMachineKeyStore;
    cspParms.KeyContainerName = "My Keys";
    var algorithm = new RSACryptoServiceProvider(cspParms);
    var sourceBytes = new UnicodeEncoding().GetBytes(myData);
    rsaCipherText = algorithm.Encrypt(sourceBytes, true);
    MessageBox.Show(String.Format("Data: {0}{1}Encrypted and Encoded: {2}",
 myData, Environment.NewLine,
 Convert.ToBase64String(rsaCipherText)));
}

解密過程:

復制代碼 代碼如下:
private void mnuAsymmetricDecryption_Click(object sender, RoutedEventArgs e)
{
    if(rsaCipherText==null)
    {
 MessageBox.Show("Encrypt First!");
 return;
    }
    var rsa = 1;
    // decrypt the data.
    var cspParms = new CspParameters(rsa);
    cspParms.Flags = CspProviderFlags.UseMachineKeyStore;
    cspParms.KeyContainerName = "My Keys";
    var algorithm = new RSACryptoServiceProvider(cspParms);
    var unencrypted = algorithm.Decrypt(rsaCipherText, true);
    MessageBox.Show(new UnicodeEncoding().GetString(unencrypted));
}

雖然非對稱加密很安全,但是和對稱加密比起來,它非常的慢,所以我們還是要用對稱加密來傳送消息,但對稱加密所使用的密鑰我們可以通過非對稱加密的方式發送出去。為了解釋這個過程,請看下面的例子:

① Alice需要在銀行的網站做一筆交易,她的瀏覽器首先生成了一個隨機數作為對稱密鑰。

② Alice的瀏覽器向銀行的網站請求公鑰。

③ 銀行將公鑰發送給Alice。

④ Alice的瀏覽器使用銀行的公鑰將自己的對稱密鑰加密。

⑤ Alice的瀏覽器將加密后的對稱密鑰發送給銀行。

⑥ 銀行使用私鑰解密得到Alice瀏覽器的對稱密鑰。

⑦ Alice與銀行可以使用對稱密鑰來對溝通的內容進行加密與解密了。

三、總結

① 對稱加密加密與解密使用的是同樣的密鑰,所以速度快,但由于需要將密鑰在網絡傳輸,所以安全性不高。

② 非對稱加密使用了一對密鑰,公鑰與私鑰,所以安全性高,但加密與解密速度慢。

③ 解決的辦法是將對稱加密的密鑰使用非對稱加密的公鑰進行加密,然后發送出去,接收方使用私鑰進行解密得到對稱加密的密鑰,然后雙方可以使用對稱加密來進行溝通。

希望本文所述對大家的C#程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品一区电影| 日韩国产精品亚洲а∨天堂免| 日本久久久久亚洲中字幕| 欧美另类极品videosbest最新版本| 亚洲人成网站色ww在线| 成人国产精品久久久久久亚洲| 亚洲欧美一区二区精品久久久| 一区二区三区精品99久久| www.欧美三级电影.com| 欧美日韩国产在线看| 日韩www在线| 亚洲精品乱码久久久久久金桔影视| 国产亚洲视频中文字幕视频| 国产亚洲在线播放| 日韩精品在线观看一区二区| 日韩欧美第一页| 92看片淫黄大片欧美看国产片| 久久精品影视伊人网| 一本色道久久88精品综合| 国产日韩欧美在线播放| 国产一区二区香蕉| 国产精品一区二区3区| 黄网站色欧美视频| 欧美日韩国产在线播放| 日韩极品精品视频免费观看| 日韩精品免费综合视频在线播放| 久青草国产97香蕉在线视频| 久久久久久久久久国产| 在线视频日本亚洲性| 日韩亚洲欧美中文高清在线| 日韩国产在线看| 中文字幕亚洲综合久久筱田步美| 国产在线999| 狠狠色噜噜狠狠狠狠97| 亚洲欧美激情视频| 日韩精品极品毛片系列视频| 欧美裸体xxxx| 欧美日韩一区二区在线| 黑人狂躁日本妞一区二区三区| 不卡中文字幕av| 欧美性色19p| 成人亚洲综合色就1024| 国产精品三级美女白浆呻吟| 国内外成人免费激情在线视频网站| 亚洲第一视频在线观看| 姬川优奈aav一区二区| 97久久精品人人澡人人爽缅北| 国产成人aa精品一区在线播放| 啪一啪鲁一鲁2019在线视频| 国产日韩精品综合网站| 富二代精品短视频| 亚洲日韩欧美视频| 日韩中文字幕精品视频| 欧洲亚洲妇女av| 欧美日韩国产中文精品字幕自在自线| 91精品久久久久久综合乱菊| 欧美国产日韩xxxxx| 米奇精品一区二区三区在线观看| 欧美在线性爱视频| 欧美成人一二三| 欧美在线视频一二三| 日韩av在线免播放器| 最近2019免费中文字幕视频三| 中文字幕亚洲综合久久| 成人午夜两性视频| 日韩精品在线免费| 91久久久国产精品| 国产精品高清网站| 92看片淫黄大片看国产片| 欧美激情在线播放| 国产成人亚洲综合| 国产自摸综合网| 成人久久一区二区| 欧美精品18videos性欧| 欧美人与物videos| 国产一区二区丝袜| 日韩欧美亚洲范冰冰与中字| 国产精品国产福利国产秒拍| 精品高清美女精品国产区| 精品国产区一区二区三区在线观看| 亚洲国产高清高潮精品美女| 欧美一区二区影院| 中文日韩在线观看| 日本欧美国产在线| 成人黄色片网站| 国产日韩欧美视频| 日韩性生活视频| 国产精品夫妻激情| 亚洲精品在线不卡| 日韩a**中文字幕| 国产精品久久久久久久午夜| 日本久久亚洲电影| 亚洲欧美国产另类| 久久精品91久久香蕉加勒比| 久久久久成人精品| www.欧美视频| 日韩精品免费看| 亚洲v日韩v综合v精品v| 亚洲欧美色图片| 性视频1819p久久| 国产精品福利在线| 狠狠躁夜夜躁人人躁婷婷91| 欧美日韩国产一中文字不卡| 久久人人97超碰精品888| 亚洲精品之草原avav久久| 伊人成人开心激情综合网| 日韩在线中文字幕| 青青久久av北条麻妃黑人| 日本成人免费在线| 色婷婷久久av| 亚洲女性裸体视频| 国产精品自产拍高潮在线观看| 国产成人精品在线播放| 这里只有精品在线观看| 欧美电影免费观看电视剧大全| 国产精品久久av| 日韩在线视频免费观看| 亚洲国产精品久久| 81精品国产乱码久久久久久| 成人有码视频在线播放| 欧美日韩在线免费观看| 91精品综合视频| 91黑丝高跟在线| 欧美成人小视频| 久久免费视频网站| 超薄丝袜一区二区| 尤物yw午夜国产精品视频明星| 最近2019年中文视频免费在线观看| 精品久久久一区二区| 性亚洲最疯狂xxxx高清| 精品亚洲国产成av人片传媒| 国产日韩欧美日韩| 欧美精品制服第一页| 国产精品扒开腿做爽爽爽男男| 91久久精品国产91久久| www日韩欧美| 久久精品国产91精品亚洲| 最近2019中文字幕在线高清| 久久艹在线视频| 午夜精品久久久久久99热软件| 欧美性精品220| 欧洲美女免费图片一区| 国产成人精彩在线视频九色| 成人国产亚洲精品a区天堂华泰| 亚洲aa中文字幕| 国产精品久久婷婷六月丁香| 精品国产一区二区三区久久久狼| 亚洲国产日韩欧美综合久久| 欧美视频二区36p| 亚洲毛茸茸少妇高潮呻吟| 成人黄色短视频在线观看| 国产日韩av在线播放| 高清欧美性猛交xxxx| 亚洲欧美日韩精品久久| 97免费在线视频| 日韩精品中文字幕视频在线| 欧美电影免费观看高清| 久久亚洲精品国产亚洲老地址| 欧美野外猛男的大粗鳮| 88国产精品欧美一区二区三区| 国产精品视频26uuu| 欧美国产日韩中文字幕在线| 亚洲一区二区久久久| 国产精品欧美一区二区|