C#實現記憶體中字串或byte[]的加解密

來源:互聯網
上載者:User

程式如下:最重要的是兩個函數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>}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.