.NET私密金鑰加密實現

來源:互聯網
上載者:User

     加密分目前為兩種:私密金鑰和公開金鑰加密,也稱對稱性和非對稱性加密.
     私密金鑰加密只使用一把鑰匙來加解密,因為同一把密鑰既用於加密又用於解密,所以私密金鑰加密非常快(與公開金鑰演算法相比),特別適用於對較大的資料流執行加密轉換。
      加解密有太多東西要介紹了,所以這次只介紹私密金鑰加密,私密金鑰加密,只用於一次加密一個資料區塊,也就是將N個位元組加密後轉換為加密的位元組輸出,既然是加密 ,
      當然需要一個KEY,Right?而在.NET 中提供的加密類使用的是一個稱為"密碼塊鏈 (CBC) "的鏈模式,它需要一個KEY和一個IV初始化向量,它是分塊來加密的,而要先用IV向量來加密第一個塊,(萬事必須有個開頭嘛)
      接著就用上一個塊加密下一個塊直到讀取完畢.
      另外發送和接收訊息雙方,必須互相傳達了密鑰和 IV 的值且密鑰不能為未授權使用者所知.

      私密金鑰加密的優點:速度快.缺點:有耐心的朋友可以用窮舉法破解,呵呵,我可沒耐心.
      用途: 通常與公開金鑰加密一起使用,在公開金鑰加密中,先對公開金鑰加密後再將公開金鑰發送給對方.給公開金鑰加密演算法一個輔助作用.
   
     囉嗦完了,下面看代碼:(先在執行檔案目錄建一個文字檔)

//------------------------------檔案加密過程
            
             FileStream fin=new FileStream("input.txt",FileMode.Open,FileAccess.Read);
            FileStream fout=new FileStream("output.txt",FileMode.OpenOrCreate,FileAccess.Write);
            
            //建立加密類

            DES des = new DESCryptoServiceProvider();
            des.GenerateKey();  //擷取隨機產生的Key,和 IV
            des.GenerateIV();
            byte[] keys=des.Key;
            byte[] ivs=des.IV;
            
            long leng=fin.Length; //擷取檔案的長度
            long temp=0;  //臨時變數
            byte[] buffer=new byte[400];  //用於隱藏檔內容於緩衝

            CryptoStream cStream=new CryptoStream(fout,des.CreateEncryptor(keys,ivs),CryptoStreamMode.Write); //建立加密流並寫入到"output.txt"檔案
            while(temp<leng)  
            {
                int wLeng=fin.Read(buffer,0,400); //寫入緩衝
                cStream.Write(buffer,0,wLeng); //寫入檔案
                temp=temp+leng;
                Console.WriteLine("加密成功");

                Console.ReadLine();
            }
            cStream.Close();
            
            fout.Close();
            fin.Close();

 

解密:

//------------------------------檔案解密過程
            
            FileStream fin1=new FileStream("output.txt",FileMode.Open,FileAccess.Read);
            FileStream fout1=new FileStream("解密.txt",FileMode.OpenOrCreate,FileAccess.Write);
            
             

            //DES des1 = new DESCryptoServiceProvider();
            //des1.GenerateKey();  //擷取隨機產生的Key,和 IV
            //des1.GenerateIV();
            //byte[] keys1=des1.Key;
            //byte[] ivs1=des1.IV;
            
            long leng1=fin1.Length; //擷取檔案的長度
            long temp1=0;  //臨時變數
            byte[] buffer1=new byte[400];  //用於隱藏檔內容於緩衝

            CryptoStream cStream1=new CryptoStream(fout1,des.CreateDecryptor(keys,ivs),CryptoStreamMode.Write); //建立加密流並寫入到"output.txt"檔案
            while(temp1<leng1)  
            {
                int wLeng1=fin1.Read(buffer1,0,400); //寫入緩衝
                cStream1.Write(buffer1,0,wLeng1); //寫入檔案
                temp1=temp1+leng1;
                Console.WriteLine("解密成功");

                Console.ReadLine();
            }
            cStream.Close();
            
            fout.Close();
            fin.Close();
    //--------------------------Over

 

關於DES演算法的加密過程參考:http://www.vchome.net/tech/datastruct/datasf25.htm

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.