加密
static byte[] EncryptBytes_Aes(byte[] plainText, byte[] Key, byte[] IV) { // Check arguments. if (plainText == null || plainText.Length <= 0) throw new ArgumentNullException("plainText"); if (Key == null || Key.Length <= 0) throw new ArgumentNullException("Key"); if (IV == null || IV.Length <= 0) throw new ArgumentNullException("IV"); byte[] encrypted; // Create an AesManaged object // with the specified key and IV. using (AesManaged aesAlg = new AesManaged()) { aesAlg.Key = Key; aesAlg.IV = IV; // Create a decrytor to perform the stream transform. ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV); // Create the streams used for encryption. using (MemoryStream msEncrypt = new MemoryStream()) { using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write)) { using (BinaryWriter bw = new BinaryWriter(csEncrypt)) { bw.Write(plainText); } } encrypted = msEncrypt.ToArray(); } } // Return the encrypted bytes from the memory stream. return encrypted; }
解密
static byte[] DecryptBytes_Aes(byte[] cipherText, byte[] Key, byte[] IV) { // Check arguments. if (cipherText == null || cipherText.Length <= 0) throw new ArgumentNullException("cipherText"); if (Key == null || Key.Length <= 0) throw new ArgumentNullException("Key"); if (IV == null || IV.Length <= 0) throw new ArgumentNullException("IV"); // Declare the string used to hold // the decrypted text. List<byte> plaintext = new List<byte>(); // Create an AesManaged object // with the specified key and IV. using (AesManaged aesAlg = new AesManaged()) { aesAlg.Key = Key; aesAlg.IV = IV; // Create a decrytor to perform the stream transform. ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV); // Create the streams used for decryption. using (MemoryStream msDecrypt = new MemoryStream(cipherText)) { using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read)) { using (BinaryReader br = new BinaryReader(csDecrypt)) { int bufferLen = 1024; byte[] buffer = new byte[bufferLen]; int read = 0; while ((read = br.Read(buffer, 0, bufferLen)) > 0) plaintext.AddRange(buffer.Take(read)); } } } } return plaintext.ToArray(); }
演示:
string str = "Test ase,我们一起来测试AES"; byte[] plainBytes = Encoding.UTF8.GetBytes(str); using (AesManaged aes = new AesManaged()) { byte[] eBytes = EncryptBytes_Aes(plainBytes, aes.Key, aes.IV); byte[] dBytes = DecryptBytes_Aes(eBytes, aes.Key, aes.IV); //OutputBytes(plainBytes); //OutputBytes(eBytes); //OutputBytes(dBytes); Console.WriteLine("明文:{0}", str); Console.WriteLine("明文数组:{0}", FormatBytes(plainBytes)); Console.WriteLine("加密后的数组:{0}", FormatBytes(eBytes)); Console.WriteLine("解密后的数组:{0}", FormatBytes(dBytes)); Console.WriteLine("解密的明文:{0}", Encoding.UTF8.GetString(dBytes)); }
static string FormatBytes(byte[] bytes,byte countInLine = 10) { StringBuilder sb = new StringBuilder(); int i = 0; foreach (byte b in bytes) { if (i++ % countInLine == 0) sb.Append(‘\n‘); sb.Append(String.Format("{0:X2} ", b)); } sb.Append(‘\b‘); return sb.ToString(); }
C# AES,AesManaged使用学习,布布扣,bubuko.com
时间: 2024-10-27 13:45:37