日本好好热aⅴ|国产99视频精品免费观看|日本成人aV在线|久热香蕉国产在线

  • <cite id="ikgdy"><table id="ikgdy"></table></cite>
    1. 西西軟件園多重安全檢測(cè)下載網(wǎng)站、值得信賴的軟件下載站!
      軟件
      軟件
      文章
      搜索

      首頁編程開發(fā)C#.NET → C#開發(fā)中常用加密解密方法解析

      C#開發(fā)中常用加密解密方法解析

      相關(guān)軟件相關(guān)文章發(fā)表評(píng)論 來源:西西整理時(shí)間:2012/10/26 15:27:12字體大小:A-A+

      作者:西西點(diǎn)擊:4834次評(píng)論:4次標(biāo)簽: 加密

      .net代碼加密免費(fèi)版
      • 類型:編程輔助大。3.8M語言:英文 評(píng)分:5.0
      • 標(biāo)簽:
      立即下載

       因?yàn)樽罱淖龅臇|西要用到一些關(guān)于加密的技術(shù),所以就把一些常用的加密方法給給總結(jié)了一下。好了廢話不多說,還是按照以往的慣例,我會(huì)通過一個(gè)個(gè)的實(shí)例,逐一的把常用算法給大家講解一下。

          一、MD5加密算法

          我想這是大家都常聽過的算法,可能也用的比較多。那么什么是MD5算法呢?MD5全稱是message-digest algorithm 5,簡單的說就是單向的加密,即是說無法根據(jù)密文推導(dǎo)出明文。

            MD5主要用途:

             1、對(duì)一段信息生成信息摘要,該摘要對(duì)該信息具有唯一性,可以作為數(shù)字簽名。

             2、用于驗(yàn)證文件的有效性(是否有丟失或損壞的數(shù)據(jù)),

             3、對(duì)用戶密碼的加密,

             4、在哈希函數(shù)中計(jì)算散列值

         從上邊的主要用途中我們看到,由于算法的某些不可逆特征,在加密應(yīng)用上有較好的安全性。通過使用MD5加密算法,我們輸入一個(gè)任意長度的字節(jié)串,都會(huì)生成一個(gè)128位的整數(shù)。所以根據(jù)這一點(diǎn)MD5被廣泛的用作密碼加密。下面我就像大家演示一下怎樣進(jìn)行密碼加密。

         先看下演示效果:

      具體代碼如下:

      首先需要引入命名空間:

      using System.Security;
      using System.Security.Cryptography;
      private void btnmd5_Click(object sender, EventArgs e)
      {
      MD5 md5 = new MD5CryptoServiceProvider();
      byte[] palindata = Encoding.Default.GetBytes(txtyuan.Text);//將要加密的字符串轉(zhuǎn)換為字節(jié)數(shù)組
      byte[] encryptdata=md5.ComputeHash(palindata);//將字符串加密后也轉(zhuǎn)換為字符數(shù)組
      txtjiami.Text = Convert.ToBase64String(encryptdata);//將加密后的字節(jié)數(shù)組轉(zhuǎn)換為加密字符串
      }

          這里我們需要注意的是,不論是在加密的過程中,加密前要將加密字符串轉(zhuǎn)為字節(jié)數(shù)組,加密后也要生成密文的字節(jié)數(shù)據(jù),然后再轉(zhuǎn)化為密文。

          二、RSA加密算法

          在談RSA加密算法之前,我們需要先了解下兩個(gè)專業(yè)名詞,對(duì)稱加密和非對(duì)稱加密。

          對(duì)稱加密即:含有一個(gè)稱為密鑰的東西,在消息發(fā)送前使用密鑰對(duì)消息進(jìn)行加密,在對(duì)方收到消息之后,使用相同的密鑰進(jìn)行解密

      非對(duì)稱加密即:加密和解密使用不同的密鑰的一類加密算法。這類加密算法通常有兩個(gè)密鑰A和B,使用密鑰A加密數(shù)據(jù)得到的密文,只有密鑰B可以進(jìn)行解密操作(即使密鑰A也無法解密),相反,使用了密鑰B加密數(shù)據(jù)得到的密文,只有密鑰A可以解密。這兩個(gè)密鑰分別稱為私鑰和公鑰,顧名思義,私鑰就是你個(gè)人保留,不能公開的密鑰,而公鑰則是公開給加解密操作的另一方的。根據(jù)不同用途,對(duì)數(shù)據(jù)進(jìn)行加密所使用的密鑰也不相同(有時(shí)用公鑰加密,私鑰解密;有時(shí)相反用私鑰加密,公鑰解密)。非對(duì)稱加密的代表算法是RSA算法。

           了解了這兩個(gè)名詞下面來講,RSA加密算法。RSA取名來自開發(fā)他們?nèi)叩拿。RSA是目前最有影響力的公鑰加密算法,多用于數(shù)據(jù)加密和數(shù)字簽名。雖然有這么大的影響力,但是同時(shí)它也有一些弊端,它產(chǎn)生密鑰很麻煩,受到素?cái)?shù)產(chǎn)生技術(shù)的限制,因而難以做到一次一密,分組長度太大等。

           下面通過示例演示使用RSA加密、解密:

           先創(chuàng)建一個(gè)全局的CspParameters對(duì)象param

           加密:

      private void btnjm_Click(object sender, EventArgs e)
      {
      param = new CspParameters();
      param.KeyContainerName = "Olive";//密匙容器的名稱,保持加密解密一致才能解密成功
      using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(param))
      {
      byte[] plaindata = Encoding.Default.GetBytes(txtyuan.Text);//將要加密的字符串轉(zhuǎn)換為字節(jié)數(shù)組
      byte[] encryptdata = rsa.Encrypt(plaindata, false);//將加密后的字節(jié)數(shù)據(jù)轉(zhuǎn)換為新的加密字節(jié)數(shù)組
      txtjiami.Text =Convert.ToBase64String(encryptdata);//將加密后的字節(jié)數(shù)組轉(zhuǎn)換為字符串
      }
      }

          解密:

      private void btnjiemi_Click(object sender, EventArgs e)
      {
      param = new CspParameters();
      param.KeyContainerName = "Olive";
      using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(param))
      {
      byte[] encryptdata = Convert.FromBase64String(this.txtjiami.Text);
      byte[] decryptdata = rsa.Decrypt(encryptdata, false);
      txthjiemi.Text = Encoding.Default.GetString(decryptdata);
      }
      }

          效果如圖:

           下面我再通過一個(gè)示例向大家演示,通過使用RSA加密算法產(chǎn)出公匙和私匙

      RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
      using (StreamWriter sw = new StreamWriter(@"D:\PublicKey.xml"))//產(chǎn)生公匙
      {
      sw.WriteLine(rsa.ToXmlString(false));
      }
      using (StreamWriter sw = new StreamWriter(@"D:\PrivateKey.xml"))//產(chǎn)生私匙(也包含私匙)
      {
      sw.WriteLine(rsa.ToXmlString(false));
      }
          三、DES加密

          DES加密:使用一個(gè) 56 位的密鑰以及附加的 8 位奇偶校驗(yàn)位,產(chǎn)生最大 64 位的分組大小。這是一個(gè)迭代的分組密碼,使用稱為 Feistel 的技術(shù),其中將加密的文本塊分成兩半。使用子密鑰對(duì)其中一半應(yīng)用循環(huán)功能,然后將輸出與另一半進(jìn)行“異或”運(yùn)算;接著交換這兩半,這一過程會(huì)繼續(xù)下去,但最后一個(gè)循環(huán)不交換。DES 使用 16 個(gè)循環(huán),使用異或,置換,代換,移位操作四種基本運(yùn)算。額專業(yè)術(shù)語就看看得了,下面直接給大家演示一個(gè)小demo,以幫助大家的理解。

         先定義一個(gè)全局的字節(jié)數(shù)組和實(shí)例化一個(gè)全局的DESCryptoServiceProvider對(duì)象

              byte[] buffer;

              DESCryptoServiceProvider DesCSP = new DESCryptoServiceProvider();

         加密:

      private void button2_Click(object sender, EventArgs e)
      {
      MemoryStream ms = new MemoryStream();//先創(chuàng)建 一個(gè)內(nèi)存流
      CryptoStream cryStream = new CryptoStream(ms, DesCSP.CreateEncryptor(), CryptoStreamMode.Write);//將內(nèi)存流連接到加密轉(zhuǎn)換流
      StreamWriter sw = new StreamWriter(cryStream);
      sw.WriteLine(txtyuan.Text);//將要加密的字符串寫入加密轉(zhuǎn)換流
      sw.Close();
      cryStream.Close();
      buffer = ms.ToArray();//將加密后的流轉(zhuǎn)換為字節(jié)數(shù)組
      txtjiami.Text =Convert.ToBase64String(buffer);//將加密后的字節(jié)數(shù)組轉(zhuǎn)換為字符串
      }

          解密:

      private void button1_Click(object sender, EventArgs e)
      {
      MemoryStream ms = new MemoryStream(buffer);//將加密后的字節(jié)數(shù)據(jù)加入內(nèi)存流中
      CryptoStream cryStream = new CryptoStream(ms, DesCSP.CreateDecryptor(), CryptoStreamMode.Read);//內(nèi)存流連接到解密流中
      StreamReader sr = new StreamReader(cryStream);
      txthjiemi.Text = sr.ReadLine();//將解密流讀取為字符串
      sr.Close();
      cryStream.Close();
      ms.Close();
      }

          此外還有AES加密算法,但是AES加密是一個(gè)新的可以用于保護(hù)電子數(shù)據(jù)的加密算法。其產(chǎn)生的密碼是迭代對(duì)稱的分組密碼,代加密使用一個(gè)循環(huán)結(jié)構(gòu),在該循環(huán)中重復(fù)置換和替換輸入數(shù)據(jù)。因?yàn)橛玫牟皇呛芏,在這里就不再做具體的演示了。

          好了,關(guān)于加密這一節(jié)就講到這里了,這里只是簡單的介紹了幾種常用的加密方法,同時(shí)配以簡單的示例,主要的目的在于對(duì)這些加密算法的了解和使用,當(dāng)然,如果需要更深層次的加密僅僅知道這些還是遠(yuǎn)遠(yuǎn)不夠的,有興趣的朋友可以自己去多了解些。希望這些能給大家?guī)韼椭。也希望大家多多指點(diǎn)!

        相關(guān)評(píng)論

        閱讀本文后您有什么感想? 已有人給出評(píng)價(jià)!

        • 8 喜歡喜歡
        • 3 頂
        • 1 難過難過
        • 5 囧
        • 3 圍觀圍觀
        • 2 無聊無聊

        熱門評(píng)論

        最新評(píng)論

        第 1 樓 CZ88.NET 網(wǎng)友 客人 發(fā)表于: 2015/1/5 15:55:07
        good

        支持( 0 ) 蓋樓(回復(fù))

        發(fā)表評(píng)論 查看所有評(píng)論(4)

        昵稱:
        表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
        字?jǐn)?shù): 0/500 (您的評(píng)論需要經(jīng)過審核才能顯示)