반응형
.NET Framework 에서 제공하는 System.Security.Cryptography 를 사용하여 AES 256 암복호화 하는 방법 입니다.
KEY, IV 는 적절하게 임의로 생성하여 넣습니다.
using System.Security.Cryptography;
-----
const private string AES_KEY = ""; //44
const private string AES_IV = ""; //22
public static string EncryptAES(string plainText)
{
byte[] encrypted;
using (AesCryptoServiceProvider aes = new AesCryptoServiceProvider())
{
aes.KeySize = 256;
aes.BlockSize = 128;
aes.Key = Convert.FromBase64String(AES_KEY);
aes.IV = Convert.FromBase64String(AES_IV);
aes.Mode = CipherMode.CBC;
aes.Padding = PaddingMode.PKCS7;
ICryptoTransform enc = aes.CreateEncryptor(aes.Key, aes.IV);
using (MemoryStream ms = new MemoryStream())
{
using (CryptoStream cs = new CryptoStream(ms, enc, CryptoStreamMode.Write))
{
using (StreamWriter sw = new StreamWriter(cs))
{
sw.Write(plainText);
}
encrypted = ms.ToArray();
}
}
}
return Convert.ToBase64String(encrypted);
}
public static string DecryptAES(string encryptedText)
{
string decrypted = null;
try
{
byte[] cipher = Convert.FromBase64String(encryptedText);
using (AesCryptoServiceProvider aes = new AesCryptoServiceProvider())
{
aes.KeySize = 256; //AES256
aes.BlockSize = 128;
aes.Key = Convert.FromBase64String(AES_KEY);
aes.IV = Convert.FromBase64String(AES_IV);
aes.Mode = CipherMode.CBC;
aes.Padding = PaddingMode.PKCS7;
ICryptoTransform dec = aes.CreateDecryptor(aes.Key, aes.IV);
using (MemoryStream ms = new MemoryStream(cipher))
{
using (CryptoStream cs = new CryptoStream(ms, dec, CryptoStreamMode.Read))
{
using (StreamReader sr = new StreamReader(cs))
{
decrypted = sr.ReadToEnd();
}
}
}
}
}
catch (System.FormatException ex)
{
decrypted = encryptedText; //예외처리
}
catch (System.Security.Cryptography.CryptographicException ex)
{
decrypted = encryptedText; //복호화 실패시 (대부분 암호화가 AES256 으로 되지 않은 Plain Text 같은 경우 발생)
}
catch (Exception ex)
{
//기타 오류 시 ERR 문구 리턴
decrypted = "ERR";
}
return decrypted;
}
반응형
'IT > C#' 카테고리의 다른 글
EXE (Assembly) 버전 자동으로 업데이트 하는 방법 (1) | 2023.12.29 |
---|---|
C# EventLog 에 기록하는 방법 (0) | 2023.12.22 |
PRG(POST/Redirect/GET)패턴 (0) | 2023.03.30 |
MVC5 Html Helper (Core 아님) (0) | 2023.03.30 |
ActionResult 종류 (0) | 2023.03.30 |