• <td id="ae6ms"><li id="ae6ms"></li></td>
  • <xmp id="ae6ms"><td id="ae6ms"></td><table id="ae6ms"></table>
  • <table id="ae6ms"></table>
  • <td id="ae6ms"></td>
    <td id="ae6ms"></td>
  • <table id="ae6ms"></table><table id="ae6ms"><td id="ae6ms"></td></table>
  • <td id="ae6ms"></td>
  • <table id="ae6ms"><li id="ae6ms"></li></table>
  • <table id="ae6ms"></table>
    西西軟件園多重安全檢測下載網站、值得信賴的軟件下載站!
    軟件
    軟件
    文章
    搜索

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

    C#開發中常用加密解密方法解析

    相關軟件相關文章發表評論 來源:西西整理時間:2012/10/26 15:27:12字體大?。?em class="fontsize">A-A+

    作者:西西點擊:4834次評論:4次標簽: 加密

    • 類型:編程輔助大?。?i>3.8M語言:英文 評分:5.0
    • 標簽:
    立即下載

     因為最近的做的東西要用到一些關于加密的技術,所以就把一些常用的加密方法給給總結了一下。好了廢話不多說,還是按照以往的慣例,我會通過一個個的實例,逐一的把常用算法給大家講解一下。

        一、MD5加密算法

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

          MD5主要用途:

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

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

           3、對用戶密碼的加密,

           4、在哈希函數中計算散列值

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

       先看下演示效果:

    具體代碼如下:

    首先需要引入命名空間:

    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);//將要加密的字符串轉換為字節數組
    byte[] encryptdata=md5.ComputeHash(palindata);//將字符串加密后也轉換為字符數組
    txtjiami.Text = Convert.ToBase64String(encryptdata);//將加密后的字節數組轉換為加密字符串
    }

        這里我們需要注意的是,不論是在加密的過程中,加密前要將加密字符串轉為字節數組,加密后也要生成密文的字節數據,然后再轉化為密文。

        二、RSA加密算法

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

        對稱加密即:含有一個稱為密鑰的東西,在消息發送前使用密鑰對消息進行加密,在對方收到消息之后,使用相同的密鑰進行解密

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

         了解了這兩個名詞下面來講,RSA加密算法。RSA取名來自開發他們三者的名字。RSA是目前最有影響力的公鑰加密算法,多用于數據加密和數字簽名。雖然有這么大的影響力,但是同時它也有一些弊端,它產生密鑰很麻煩,受到素數產生技術的限制,因而難以做到一次一密,分組長度太大等。

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

         先創建一個全局的CspParameters對象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);//將要加密的字符串轉換為字節數組
    byte[] encryptdata = rsa.Encrypt(plaindata, false);//將加密后的字節數據轉換為新的加密字節數組
    txtjiami.Text =Convert.ToBase64String(encryptdata);//將加密后的字節數組轉換為字符串
    }
    }

        解密:

    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);
    }
    }

        效果如圖:

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

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

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

       先定義一個全局的字節數組和實例化一個全局的DESCryptoServiceProvider對象

            byte[] buffer;

            DESCryptoServiceProvider DesCSP = new DESCryptoServiceProvider();

       加密:

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

        解密:

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

        此外還有AES加密算法,但是AES加密是一個新的可以用于保護電子數據的加密算法。其產生的密碼是迭代對稱的分組密碼,代加密使用一個循環結構,在該循環中重復置換和替換輸入數據。因為用的不是很多,在這里就不再做具體的演示了。

        好了,關于加密這一節就講到這里了,這里只是簡單的介紹了幾種常用的加密方法,同時配以簡單的示例,主要的目的在于對這些加密算法的了解和使用,當然,如果需要更深層次的加密僅僅知道這些還是遠遠不夠的,有興趣的朋友可以自己去多了解些。希望這些能給大家帶來幫助。也希望大家多多指點!

      相關評論

      閱讀本文后您有什么感想? 已有人給出評價!

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

      熱門評論

      最新評論

      第 1 樓 CZ88.NET 網友 客人 發表于: 2015/1/5 15:55:07
      good

      支持( 0 ) 蓋樓(回復)

      發表評論 查看所有評論(4)

      昵稱:
      表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
      字數: 0/500 (您的評論需要經過審核才能顯示)
      女人让男人桶30分钟免费视频,女人张开腿让男人桶个爽,一进一出又大又粗爽视频
    • <td id="ae6ms"><li id="ae6ms"></li></td>
    • <xmp id="ae6ms"><td id="ae6ms"></td><table id="ae6ms"></table>
    • <table id="ae6ms"></table>
    • <td id="ae6ms"></td>
      <td id="ae6ms"></td>
    • <table id="ae6ms"></table><table id="ae6ms"><td id="ae6ms"></td></table>
    • <td id="ae6ms"></td>
    • <table id="ae6ms"><li id="ae6ms"></li></table>
    • <table id="ae6ms"></table>