■ RijndaelManaged 클래스를 사용해 대칭키 암호화하는 방법을 보여준다.
▶ MainForm.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
using System; using System.Windows.Forms; namespace TestProject { /// <summary> /// 메인 폼 /// </summary> public partial class MainForm : Form { //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor ////////////////////////////////////////////////////////////////////////////////////////// Public #region 생성자 - MainForm() /// <summary> /// 생성자 /// </summary> public MainForm() { InitializeComponent(); this.processButton.Click += processButton_Click; } #endregion //////////////////////////////////////////////////////////////////////////////////////////////////// Method ////////////////////////////////////////////////////////////////////////////////////////// Private #region 암복호화 버튼 클릭시 처리하기 - processButton_Click(sender, e) /// <summary> /// 암복호화 버튼 클릭시 처리하기 /// </summary> /// <param name="sender">이벤트 발생자</param> /// <param name="e">이벤트 인자</param> private void processButton_Click(object sender, EventArgs e) { string cipherText = AESHelper.Encrypt(this.plainTextTextBox.Text, this.passwordTextBox.Text); this.cipherTextTextBox.Text = cipherText; string plainText = AESHelper.Decrypt(cipherText, this.passwordTextBox.Text); this.resultTextTextBox.Text = plainText; } #endregion } } |
▶ AESHelper.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
using System; using System.IO; using System.Security.Cryptography; using System.Text; namespace TestProject { /// <summary> /// AES 헬퍼 /// </summary> public class AESHelper { //////////////////////////////////////////////////////////////////////////////////////////////////// Method ////////////////////////////////////////////////////////////////////////////////////////// Static //////////////////////////////////////////////////////////////////////////////// Public #region 암호화 하기 - Encrypt(plainText, password) /// <summary> /// 암호화 하기 /// </summary> /// <param name="plainText">평문 텍스트</param> /// <param name="password">패스워드</param> /// <returns>암호화 텍스트</returns> public static string Encrypt(string plainText, string password) { RijndaelManaged rijndaelManaged = new RijndaelManaged(); byte[] saltArray = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; byte[] plaintTextArray = Encoding.Unicode.GetBytes(plainText); Rfc2898DeriveBytes rfc2898DeriveBytes = new Rfc2898DeriveBytes(password, saltArray, 100); ICryptoTransform cryptoTransform = rijndaelManaged.CreateEncryptor(rfc2898DeriveBytes.GetBytes(32), rfc2898DeriveBytes.GetBytes(16)); MemoryStream memoryStream = new MemoryStream(); CryptoStream cryptoStream = new CryptoStream(memoryStream, cryptoTransform, CryptoStreamMode.Write); cryptoStream.Write(plaintTextArray, 0, plaintTextArray.Length); cryptoStream.FlushFinalBlock(); byte[] cipherTextArray = memoryStream.ToArray(); string cipherText = Convert.ToBase64String(cipherTextArray); memoryStream.Close(); cryptoStream.Close(); return cipherText; } #endregion #region 복호화 하기 - Decrypt(cipherText, password) /// <summary> /// 복호화 하기 /// </summary> /// <param name="cipherText">암호화 텍스트</param> /// <param name="password">패스워드</param> /// <returns>평문 텍스트</returns> public static string Decrypt(string cipherText, string password) { RijndaelManaged rijndaelManaged = new RijndaelManaged(); byte[] saltArray = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; byte[] cipherTextArray = Convert.FromBase64String(cipherText); byte[] plainTextArray = new byte[cipherTextArray.Length]; Rfc2898DeriveBytes rfc2898DeriveBytes = new Rfc2898DeriveBytes(password, saltArray, 100); ICryptoTransform cryptoTransform = rijndaelManaged.CreateDecryptor(rfc2898DeriveBytes.GetBytes(32), rfc2898DeriveBytes.GetBytes(16)); MemoryStream memoryStream = new MemoryStream(cipherTextArray); CryptoStream cryptoStream = new CryptoStream(memoryStream, cryptoTransform, CryptoStreamMode.Read); int plainTextCount = cryptoStream.Read(plainTextArray, 0, plainTextArray.Length); string plainText = Encoding.Unicode.GetString(plainTextArray, 0, plainTextCount); memoryStream.Close(); cryptoStream.Close(); return plainText; } #endregion } } |