程序如下:最重要的是两个函数Encrypt和Decrypt,分别执行加解密操作,使用MemoryStream来做CryptoStream的操作对象。使用者只需要记住加密前生成的加密密钥和初始向量(即Key和IV),使用这个Key和IV可以将byte[]进行加解密。至于字符串,用Encoding转换成byte[]就可以。
加密方式是AES,当然可以根据自己需求修改成其他加密算法
运行截图:
代码:
using System; using System.Text; using System.IO; using System.Security.Cryptography; namespace Mgen.TTC { class Program { static void Main() { using (var aes = Aes.Create()) { byte[] key, iv; //其实Key和IV默认自己就会随机生成的,这里强调一下这个过程 aes.GenerateKey(); aes.GenerateIV(); key = aes.Key; iv = aes.IV; Console.WriteLine("请输入需要加密的文字"); string src = Console.ReadLine(); Console.WriteLine(); var datRaw = Encoding.Default.GetBytes(src); var datEnc = Encrypt(datRaw, key, iv); Console.WriteLine("加密Key: "); PrintBytes(key); Console.WriteLine(); Console.WriteLine("加密IV: "); PrintBytes(iv); Console.WriteLine(); Console.WriteLine("源数据"); PrintBytesB64(datRaw); Console.WriteLine(); Console.WriteLine("加密后数据"); PrintBytesB64(datEnc); Console.WriteLine(); Console.WriteLine("使用Key和IV解密后的文字"); var dec = Decrypt(datEnc, key, iv); Console.WriteLine(Encoding.Default.GetString(dec)); } } static byte[] Encrypt(byte[] src, byte[] key, byte[] iv) { using (var aes = Aes.Create()) { aes.Key = key; aes.IV = iv; using (var ms = new MemoryStream()) using (var cstream = new CryptoStream(ms, aes.CreateEncryptor(), CryptoStreamMode.Write)) { cstream.Write(src, 0, src.Length); cstream.Close(); ms.Close(); return ms.ToArray(); } } } static byte[] Decrypt(byte[] dest, byte[] key, byte[] iv) { using (var aes = Aes.Create()) { aes.Key = key; aes.IV = iv; using (var ms = new MemoryStream(dest)) using (var destMs = new MemoryStream()) using (var cstream = new CryptoStream(ms, aes.CreateDecryptor(), CryptoStreamMode.Read)) { byte[] data = new byte[100]; int readLen; while ((readLen = cstream.Read(data, 0, 100)) > 0) destMs.Write(data, 0, readLen); return destMs.ToArray(); } } } static void PrintBytes(byte[] data) { if (data == null) throw new ArgumentNullException("data"); foreach (var b in data) Console.Write("{0:X2} ", b); Console.WriteLine(); } static void PrintBytesB64(byte[] data) { if (data == null) throw new ArgumentNullException("data"); Console.WriteLine(Convert.ToBase64String(data, Base64FormattingOptions.InsertLineBreaks)); } } }