반응형

.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

+ Recent posts