C#實現DES加密解密,AES加密解密

DES算法描述簡介:

DES是Data Encryption Standard(數據加密標準)的縮寫。它是由IBM公司研製的一種加密算法,美國國家標準局於1977年公佈把它做爲非機要部門使用的數據加密標準;它是一個分組加密算法,他以64位爲分組對數據加密。同時DES也是一個對稱算法:加密和解密用的是同一個算法。它的密匙長度是56位(由於每一個第8 位都用做奇偶校驗),密匙能夠是任意的56位的數,並且能夠任意時候改變.

/// <summary>
   /// DES加密
   /// </summary>
   /// <param name="Data">被加密的明文</param>
   /// <param name="Key">密鑰</param>
   /// <param name="Vector">向量</param>
   /// <returns>密文</returns>
   public static Byte[] DESEncrypt(Byte[] Data, String Key, String Vector)
   {
   Byte[] bKey = new Byte[8];
   Array.Copy(Encoding.UTF8.GetBytes(Key.PadRight(bKey.Length)), bKey, bKey.Length);
   Byte[] bVector = new Byte[8];
   Array.Copy(Encoding.UTF8.GetBytes(Vector.PadRight(bVector.Length)), bVector, bVector.Length);

   Byte[] Cryptograph = null; // 加密後的密文

   DESCryptoServiceProvider EncryptProvider = new DESCryptoServiceProvider();
   EncryptProvider.Mode = CipherMode.CBC;
   EncryptProvider.Padding = PaddingMode.Zeros;

   try
   {
     // 開闢一塊內存流
     using (MemoryStream Memory = new MemoryStream())
     {
     // 把內存流對象包裝成加密流對象
     using (CryptoStream Encryptor = new CryptoStream(Memory,
     EncryptProvider.CreateEncryptor(bKey, bVector),
     CryptoStreamMode.Write))
     {
       // 明文數據寫入加密流
       Encryptor.Write(Data, 0, Data.Length);
       Encryptor.FlushFinalBlock();

       Cryptograph = Memory.ToArray();
     }
     }
   }
   catch
   {
     Cryptograph = null;
   }

   return Cryptograph;
   }

   /// <summary>
   /// DES解密
   /// </summary>
   /// <param name="Data">被解密的密文</param>
   /// <param name="Key">密鑰</param>
   /// <param name="Vector">向量</param>
   /// <returns>明文</returns>
   public static Byte[] DESDecrypt(Byte[] Data, String Key, String Vector)
   {
   Byte[] bKey = new Byte[8];
   Array.Copy(Encoding.UTF8.GetBytes(Key.PadRight(bKey.Length)), bKey, bKey.Length);
   Byte[] bVector = new Byte[8];
   Array.Copy(Encoding.UTF8.GetBytes(Vector.PadRight(bVector.Length)), bVector, bVector.Length);

   Byte[] original = null;

   DESCryptoServiceProvider CryptoProvider = new DESCryptoServiceProvider();
   CryptoProvider.Mode = CipherMode.CBC;
   CryptoProvider.Padding = PaddingMode.Zeros;

   try
   {
     // 開闢一塊內存流,存儲密文
     using (MemoryStream Memory = new MemoryStream(Data))
     {
     // 把內存流對象包裝成加密流對象
     using (CryptoStream Decryptor = new CryptoStream(Memory,
     CryptoProvider.CreateDecryptor(bKey, bVector),
     CryptoStreamMode.Read))
     {
       // 明文存儲區
       using (MemoryStream originalMemory = new MemoryStream())
       {
       Byte[] Buffer = new Byte[1024];
       Int32 readBytes = 0;
       while ((readBytes = Decryptor.Read(Buffer, 0, Buffer.Length)) > 0)
       {
         originalMemory.Write(Buffer, 0, readBytes);
       }

       original = originalMemory.ToArray();
       }
     }
     }
   }
   catch
   {
     original = null;
   }

   return original;
   }





AES算法描述簡介:

DES數據加密標準算法因爲密鑰長度較小(56位),已經不適應當今分佈式開放網絡對數據加密安全性的要求,所以1997年NIST公開徵集新的數據加密標準,即AES。通過三輪的篩選,比利時Joan Daeman和Vincent Rijmen提交的Rijndael算法被提議爲AES的最終算法。此算法將成爲美國新的數據加密標準而被普遍應用在各個領域中。儘管人們對AES還有不一樣的見解,但整體來講,AES做爲新一代的數據加密標準匯聚了強安全性、高性能、高效率、易用和靈活等優勢。AES設計有三個密鑰長度:128,192,256位,相對而言,AES的128密鑰比DES的56密鑰強1021倍。

/// <summary>
   /// AES加密
   /// </summary>
   /// <param name="Data">被加密的明文</param>
   /// <param name="Key">密鑰</param>
   /// <param name="Vector">向量</param>
   /// <returns>密文</returns>
   public static Byte[] AESEncrypt(Byte[] Data, String Key, String Vector)
   {
   Byte[] bKey = new Byte[32];
   Array.Copy(Encoding.UTF8.GetBytes(Key.PadRight(bKey.Length)), bKey, bKey.Length);
   Byte[] bVector = new Byte[16];
   Array.Copy(Encoding.UTF8.GetBytes(Vector.PadRight(bVector.Length)), bVector, bVector.Length);

   Byte[] Cryptograph = null; // 加密後的密文

   Rijndael Aes = Rijndael.Create();
   try
   {
     // 開闢一塊內存流
     using (MemoryStream Memory = new MemoryStream())
     {
     // 把內存流對象包裝成加密流對象
     using (CryptoStream Encryptor = new CryptoStream(Memory,
       Aes.CreateEncryptor(bKey, bVector),
       CryptoStreamMode.Write))
     {
       // 明文數據寫入加密流
       Encryptor.Write(Data, 0, Data.Length);
       Encryptor.FlushFinalBlock();

       Cryptograph = Memory.ToArray();
     }
     }
   }
   catch
   {
     Cryptograph = null;
   }

   return Cryptograph;
   }

   /// <summary>
   /// AES解密
   /// </summary>
   /// <param name="Data">被解密的密文</param>
   /// <param name="Key">密鑰</param>
   /// <param name="Vector">向量</param>
   /// <returns>明文</returns>
   public static Byte[] AESDecrypt(Byte[] Data, String Key, String Vector)
   {
   Byte[] bKey = new Byte[32];
   Array.Copy(Encoding.UTF8.GetBytes(Key.PadRight(bKey.Length)), bKey, bKey.Length);
   Byte[] bVector = new Byte[16];
   Array.Copy(Encoding.UTF8.GetBytes(Vector.PadRight(bVector.Length)), bVector, bVector.Length);

   Byte[] original = null; // 解密後的明文

   Rijndael Aes = Rijndael.Create();
   try
   {
     // 開闢一塊內存流,存儲密文
     using (MemoryStream Memory = new MemoryStream(Data))
     {
     // 把內存流對象包裝成加密流對象
     using (CryptoStream Decryptor = new CryptoStream(Memory,
     Aes.CreateDecryptor(bKey, bVector),
     CryptoStreamMode.Read))
     {
       // 明文存儲區
       using (MemoryStream originalMemory = new MemoryStream())
       {
       Byte[] Buffer = new Byte[1024];
       Int32 readBytes = 0;
       while ((readBytes = Decryptor.Read(Buffer, 0, Buffer.Length)) > 0)
       {
         originalMemory.Write(Buffer, 0, readBytes);
       }

       original = originalMemory.ToArray();
       }
     }
     }
   }
   catch
   {
     original = null;
   }

   return original;
   }算法

相關文章
相關標籤/搜索