摘要:使用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 }