程式如下:最重要的是兩個函數Encrypt和Decrypt,分別執行加解密操作,使用MemoryStream來做CryptoStream的操作對象。使用者只需要記住加密前產生的加密金鑰和初始向量(即Key和IV),使用這個Key和IV可以將byte[]進行加解密。至於字串,用Encoding轉換成byte[]就可以。
加密方式是AES,當然可以根據自己需求修改成其他密碼編譯演算法
運行:
代碼:
using System;</p><p>using System.Text;</p><p>using System.IO;</p><p>using System.Security.Cryptography;</p><p>namespace Mgen.TTC</p><p>{</p><p> class Program</p><p> {</p><p> static void Main()</p><p> {</p><p> using (var aes = Aes.Create())</p><p> {</p><p> byte[] key, iv;</p><p> //其實Key和IV預設自己就會隨機產生的,這裡強調一下這個過程</p><p> aes.GenerateKey();</p><p> aes.GenerateIV();</p><p> key = aes.Key;</p><p> iv = aes.IV;</p><p> Console.WriteLine("請輸入需要加密的文字");</p><p> string src = Console.ReadLine();</p><p> Console.WriteLine();</p><p> var datRaw = Encoding.Default.GetBytes(src);</p><p> var datEnc = Encrypt(datRaw, key, iv);</p><p> Console.WriteLine("加密Key: ");</p><p> PrintBytes(key);</p><p> Console.WriteLine();</p><p> Console.WriteLine("加密IV: ");</p><p> PrintBytes(iv);</p><p> Console.WriteLine();</p><p> Console.WriteLine("來源資料");</p><p> PrintBytesB64(datRaw);</p><p> Console.WriteLine();</p><p> Console.WriteLine("加密後資料");</p><p> PrintBytesB64(datEnc);</p><p> Console.WriteLine();</p><p> Console.WriteLine("使用Key和IV解密後的文字");</p><p> var dec = Decrypt(datEnc, key, iv);</p><p> Console.WriteLine(Encoding.Default.GetString(dec));</p><p> }</p><p> }</p><p> static byte[] Encrypt(byte[] src, byte[] key, byte[] iv)</p><p> {</p><p> using (var aes = Aes.Create())</p><p> {</p><p> aes.Key = key;</p><p> aes.IV = iv;</p><p> using (var ms = new MemoryStream())</p><p> using (var cstream = new CryptoStream(ms, aes.CreateEncryptor(), CryptoStreamMode.Write))</p><p> {</p><p> cstream.Write(src, 0, src.Length);</p><p> cstream.Close();</p><p> ms.Close();</p><p> return ms.ToArray();</p><p> }</p><p> }</p><p> }</p><p> static byte[] Decrypt(byte[] dest, byte[] key, byte[] iv)</p><p> {</p><p> using (var aes = Aes.Create())</p><p> {</p><p> aes.Key = key;</p><p> aes.IV = iv;</p><p> using (var ms = new MemoryStream(dest))</p><p> using (var destMs = new MemoryStream())</p><p> using (var cstream = new CryptoStream(ms, aes.CreateDecryptor(), CryptoStreamMode.Read))</p><p> {</p><p> byte[] data = new byte[100];</p><p> int readLen;</p><p> while ((readLen = cstream.Read(data, 0, 100)) > 0)</p><p> destMs.Write(data, 0, readLen);</p><p> return destMs.ToArray();</p><p> }</p><p> }</p><p> }</p><p> static void PrintBytes(byte[] data)</p><p> {</p><p> if (data == null)</p><p> throw new ArgumentNullException("data");</p><p> foreach (var b in data)</p><p> Console.Write("{0:X2} ", b);</p><p> Console.WriteLine();</p><p> }</p><p> static void PrintBytesB64(byte[] data)</p><p> {</p><p> if (data == null)</p><p> throw new ArgumentNullException("data");</p><p> Console.WriteLine(Convert.ToBase64String(data, Base64FormattingOptions.InsertLineBreaks));</p><p> }</p><p> }</p><p>}