C#实现内存中字符串或byte[]的加解密

程序如下:最重要的是两个函数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)); } } }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值