C#代码实现对AES加密解密
ES(TheAdvancedEncryptionStandard)是美国国家标准与技术研究所用于加密电子数据的规范。它被预期能成为人们公认的加密包括金融、电信和政府数字信息的方法。
本文实例为大家介绍C#实现对AES加密解密的详细代码,分享给大家供大家参考,具体内容如下
usingSystem; usingSystem.Collections.Generic; usingSystem.Linq; usingSystem.Text; usingSystem.Security.Cryptography; usingSystem.IO; namespaceAESDemo { publicstaticclassAESHelper { ///<summary> ///AES加密 ///</summary> ///<paramname="Data">被加密的明文</param> ///<paramname="Key">密钥</param> ///<paramname="Vector">向量</param> ///<returns>密文</returns> publicstaticByte[]AESEncrypt(Byte[]Data,StringKey,StringVector) { Byte[]bKey=newByte[32]; Array.Copy(Encoding.UTF8.GetBytes(Key.PadRight(bKey.Length)),bKey,bKey.Length); Byte[]bVector=newByte[16]; Array.Copy(Encoding.UTF8.GetBytes(Vector.PadRight(bVector.Length)),bVector,bVector.Length); Byte[]Cryptograph=null;//加密后的密文 RijndaelAes=Rijndael.Create(); try { //开辟一块内存流 using(MemoryStreamMemory=newMemoryStream()) { //把内存流对象包装成加密流对象 using(CryptoStreamEncryptor=newCryptoStream(Memory, Aes.CreateEncryptor(bKey,bVector), CryptoStreamMode.Write)) { //明文数据写入加密流 Encryptor.Write(Data,0,Data.Length); Encryptor.FlushFinalBlock(); Cryptograph=Memory.ToArray(); } } } catch { Cryptograph=null; } returnCryptograph; } ///<summary> ///AES解密 ///</summary> ///<paramname="Data">被解密的密文</param> ///<paramname="Key">密钥</param> ///<paramname="Vector">向量</param> ///<returns>明文</returns> publicstaticByte[]AESDecrypt(Byte[]Data,StringKey,StringVector) { Byte[]bKey=newByte[32]; Array.Copy(Encoding.UTF8.GetBytes(Key.PadRight(bKey.Length)),bKey,bKey.Length); Byte[]bVector=newByte[16]; Array.Copy(Encoding.UTF8.GetBytes(Vector.PadRight(bVector.Length)),bVector,bVector.Length); Byte[]original=null;//解密后的明文 RijndaelAes=Rijndael.Create(); try { //开辟一块内存流,存储密文 using(MemoryStreamMemory=newMemoryStream(Data)) { //把内存流对象包装成加密流对象 using(CryptoStreamDecryptor=newCryptoStream(Memory, Aes.CreateDecryptor(bKey,bVector), CryptoStreamMode.Read)) { //明文存储区 using(MemoryStreamoriginalMemory=newMemoryStream()) { Byte[]Buffer=newByte[1024]; Int32readBytes=0; while((readBytes=Decryptor.Read(Buffer,0,Buffer.Length))>0) { originalMemory.Write(Buffer,0,readBytes); } original=originalMemory.ToArray(); } } } } catch { original=null; } returnoriginal; } } } 不使用向量的方式: publicstaticclassAESCrypto { ///<summary> ///IV向量为固定值 ///</summary> //privatestaticbyte[]_iV={ //85,60,12,116, //99,189,173,19, //138,183,232,248, //82,232,200,242 //}; publicstaticbyte[]Decrypt(byte[]encryptedBytes,byte[]key) { MemoryStreammStream=newMemoryStream(encryptedBytes); //mStream.Write(encryptedBytes,0,encryptedBytes.Length); //mStream.Seek(0,SeekOrigin.Begin); RijndaelManagedaes=newRijndaelManaged(); aes.Mode=CipherMode.ECB; aes.Padding=PaddingMode.PKCS7; aes.KeySize=128; aes.Key=key; //aes.IV=_iV; CryptoStreamcryptoStream=newCryptoStream(mStream,aes.CreateDecryptor(),CryptoStreamMode.Read); try{ byte[]tmp=newbyte[encryptedBytes.Length+32]; intlen=cryptoStream.Read(tmp,0,encryptedBytes.Length+32); byte[]ret=newbyte[len]; Array.Copy(tmp,0,ret,0,len); returnret; } finally{ cryptoStream.Close(); mStream.Close(); aes.Clear(); } } publicstaticbyte[]Encrypt(byte[]plainBytes,byte[]key) { MemoryStreammStream=newMemoryStream(); RijndaelManagedaes=newRijndaelManaged(); aes.Mode=CipherMode.ECB; aes.Padding=PaddingMode.PKCS7; aes.KeySize=128; //aes.Key=_key; aes.Key=key; //aes.IV=_iV; CryptoStreamcryptoStream=newCryptoStream(mStream,aes.CreateEncryptor(),CryptoStreamMode.Write); try { cryptoStream.Write(plainBytes,0,plainBytes.Length); cryptoStream.FlushFinalBlock(); returnmStream.ToArray(); } finally { cryptoStream.Close(); mStream.Close(); aes.Clear(); } } }
希望通过这篇文章大家对AES加密解密有所了解,对C#程序设计有所帮助。