DES加密服務提供者

    內容表格
    沒有標頭

    版本為 10:22, 27 Nov 2024

    到這個版本。

    返回到 版本存檔.

    查閱目前版本

    DES稱之為Data Encryption Standard, 屬於基礎的單方向性服務. 可以拿來應用於資料串流編碼. 根據微軟提供的類別物件, 如下所示:
    [ComVisibleAttribute(true)]
    public sealed class DESCryptoServiceProvider : DES
    可以看到這個是一個密封(sealed)的實體類別, 意味它不能被繼承. 不過他實作了DES類別. 來看看DES類別的架構:
    [ComVisibleAttribute(true)]
    public abstract class DES : SymmetricAlgorithm
    這個DES是一個抽象, 不能被實例化. 由此推斷, 他的上層依然也是屬於抽象.
    [ComVisibleAttribute(true)]
    public abstract class SymmetricAlgorithm : IDisposable
    這個上層的SymmetricAlgorithm對於DESCryptoProvider而言是最頂級的抽象, 這個頂級的抽象實作了IDisposable介面, 表示由下直接或間接繼承的具象類別所產生的實例物件可以被直接摧毀(Dispose). 在微軟的DES加密服務提供64位元長度.

    根據DESCryptoServiceProvider的完整類別繼承結構如下所示:
    System.Object
      System.Security.Cryptography.SymmetricAlgorithm
        System.Security.Cryptography.DES
          System.Security.Cryptography.DESCryptoServiceProvider
    這個服務類別來自mscorlib (在 mscorlib.dll 中), 因此在創建專案, 直接就可以使用了, 預設他會匯入mscorlib.dll的參考.
    以下根據MSDN的基本範例來看看怎麼使用DES加密服務:
    private static void EncryptData(String inName, String outName, byte[] desKey, byte[] desIV)
     {   
         //Create the file streams to handle the input and output files.
         FileStream fin = new FileStream(inName, FileMode.Open, FileAccess.Read);
         FileStream fout = new FileStream(outName, FileMode.OpenOrCreate, FileAccess.Write);
         fout.SetLength(0);

         //Create variables to help with read and write.
         byte[] bin = new byte[100]; //This is intermediate storage for the encryption.
         long rdlen = 0;              //This is the total number of bytes written.
         long totlen = fin.Length;    //This is the total length of the input file.
         int len;                     //This is the number of bytes to be written at a time.

         DES des = new DESCryptoServiceProvider();         
         CryptoStream encStream = new CryptoStream(fout, des.CreateEncryptor(desKey, desIV), CryptoStreamMode.Write);

         Console.WriteLine("Encrypting...");

         //Read from the input file, then encrypt and write to the output file.
         while(rdlen < totlen)
         {
             len = fin.Read(bin, 0, 100);
             encStream.Write(bin, 0, len);
             rdlen = rdlen + len;
             Console.WriteLine("{0} bytes processed", rdlen);
         }

         encStream.Close(); 
         fout.Close();
         fin.Close();                  
     }

     

    Powered by MindTouch Core