使用 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);