使用C#開發DES密演算法文字加解密程式

摘要:使用C#開發DES密演算法文字加解密程式

使用C#開發DES密演算法文字加解密程式

筆者最近因為工作上的需要, 而弄了一個DES加密演算法開發文字加解密程式,在這邊就公開給各位參考。

  • DES『Data Encryption Standard』,於1970年代由IBM所研發,最初為Lucifer系統,後來被美國國家標準局採用,最後又被美國國家安全局修改而成。

    1 using System;

    2 using System.IO;

    3 using System.Security.Cryptography;

    4 

    5 namespace ExampleDES

    6 {

    7     class ExampleDES

    8     {

    9         static void Main(string[] args)

   10         {

   11             byte[] byteKey = { 1, 2, 3, 4, 5, 6, 7, 8 };

   12             byte[] byteIV = { 8, 7, 6, 5, 4, 3, 2, 1 };

   13             byte[] byteEncrypt = null;

   14             String strPlainText = String.Empty;

   15 

   16             try

   17             {

   18                 Console.WriteLine("DES 文字加解密範例程式");

   19                 Console.WriteLine();

   20                 Console.Write("請輸入欲加密的文字內容:");

   21 

   22                 // 呼叫 DES 加密方法

   23                 byteEncrypt = DESEncrypt(Console.ReadLine(), byteKey, byteIV);

   24 

   25                 // 輸出加密結果

   26                 Console.WriteLine(

   27                     "DES 加密結果(經 Base 64 編碼):{0}",

   28                     Convert.ToBase64String(byteEncrypt)

   29                 );

   30 

   31                 // 呼叫 DES 解密方法

   32                 strPlainText = DESDecrypt(byteEncrypt, byteKey, byteIV);

   33 

   34                 // 輸出解密結果

   35                 Console.WriteLine(

   36                     "DES 解密結果:{0}",

   37                     strPlainText

   38                 );

   39             }

   40             catch (Exception e)

   41             {

   42                 Console.Write("發生例外錯誤:" + e.Message);

   43             }

   44         }

   45 

   46         static byte[] DESEncrypt(String strInput, byte[] byteKey, byte[] byteIV)

   47         {

   48             DES des = null;

   49             ICryptoTransform ict = null;

   50             MemoryStream ms = null;

   51             CryptoStream cs = null;

   52             StreamWriter sw = null;

   53             byte[] byteResult = null;

   54 

   55             try

   56             {

   57                 des = DES.Create();

   58                 des.Key = byteKey;

   59                 des.IV = byteIV;

   60 

   61                 ict = des.CreateEncryptor();

   62 

   63                 ms = new MemoryStream();

   64 

   65                 cs = new CryptoStream(ms, ict, CryptoStreamMode.Write);

   66 

   67                 sw = new StreamWriter(cs);

   68 

   69                 sw.Write(strInput);

   70                 sw.Close();

   71 

   72                 cs.Close();

   73 

   74                 byteResult = ms.ToArray();

   75                 ms.Close();

   76 

   77                 return byteResult;

   78             }

   79             catch (Exception e)

   80             {

   81                 throw e;

   82             }

   83             finally

   84             {

   85                 if (sw != null)

   86                     sw.Close();

   87                 if (cs != null)

   88                     cs.Close();

   89                 if (ms != null)

   90                     ms.Close();

   91             }

   92         }

   93 

   94         static String DESDecrypt(byte[] byteInput, byte[] byteKey, byte[] byteIV)

   95         {

   96             DES des = null;

   97             ICryptoTransform ict = null;

   98             MemoryStream ms = null;

   99             CryptoStream cs = null;

  100             StreamReader sr = null;

  101             String strResult = String.Empty;

  102 

  103             try

  104             {

  105                 des = DES.Create();

  106                 des.Key = byteKey;

  107                 des.IV = byteIV;

  108 

  109                 ict = des.CreateDecryptor();

  110 

  111                 ms = new MemoryStream(byteInput);

  112 

  113                 cs = new CryptoStream(ms, ict, CryptoStreamMode.Read);

  114 

  115                 sr = new StreamReader(cs);

  116 

  117                 strResult = sr.ReadToEnd();

  118                 sr.Close();

  119 

  120                 cs.Close();

  121 

  122                 ms.Close();

  123 

  124                 return strResult;

  125             }

  126             catch (Exception e)

  127             {

  128                 throw e;

  129             }

  130             finally

  131             {

  132                 if (sr != null)

  133                     sr.Close();

  134                 if (cs != null)

  135                     cs.Close();

  136                 if (ms != null)

  137                     ms.Close();

  138             }

  139         }

  140     }

  141 }