使用 AES 加密與解密字串
參考:
- Keep Your Data Secure with the New Advanced Encryption Standard by James McCaffrey
- C#使用AES加密算法源代碼 (上一篇的中文翻譯)
- Advanced Encryption Standard
範例程式碼:
1: string inputString = "測試文字";
2: string password = "p@ssw0rd";
   3:         4: byte[] binputString = Encoding.UTF8.GetBytes(inputString);
5: byte[] saltBytes = Encoding.UTF8.GetBytes("salt string");
   6:         7: RijndaelManaged aes = new RijndaelManaged();
8: Rfc2898DeriveBytes key = new Rfc2898DeriveBytes(password, saltBytes);
   9:           10:  aes.KeySize = 128;        11:  aes.Key = key.GetBytes(16);        12:           13:  aes.BlockSize = 128;        14:  aes.IV = key.GetBytes(16);        15:           16:  ICryptoTransform encryptor = aes.CreateEncryptor();      17: MemoryStream memoryStream = new MemoryStream();
18: CryptoStream cryptoStream = new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write);
  19:           20:  cryptoStream.Write(binputString, 0, binputString.Length);        21:  cryptoStream.FlushFinalBlock();        22:  cryptoStream.Close();        23:         24: byte[] encryptBytes = memoryStream.ToArray();
25: string encryptedData = Convert.ToBase64String(encryptBytes);
  26:           27:  MessageBox.Show(encryptedData);        28:           29:  ICryptoTransform decryptor = aes.CreateDecryptor();        30:  encryptBytes = Convert.FromBase64String(encryptedData);      31: memoryStream = new MemoryStream();
32: cryptoStream = new CryptoStream(memoryStream, decryptor, CryptoStreamMode.Write);
  33:           34:  cryptoStream.Write(encryptBytes, 0, encryptBytes.Length);        35:  cryptoStream.Flush();        36:  cryptoStream.Close();        37:         38: byte[] decryptBytes = memoryStream.ToArray();
39: string decryptedData = Encoding.UTF8.GetString(decryptBytes);
  40:  MessageBox.Show(decryptedData);