티스토리 뷰

DeVeLoP

[C#] AES128 암,복호화 소스

freecatz 2024. 3. 29. 16:36

 

using System.Security.Cryptography;
using System.Text;


public class Util{
    
    /*
        AES128 암호화
        msg = AES128 암호화 대상 문자열
        key = AES128 암호화에 사용할 16자리의 키 문자열
    */
    static String? AES128ENC(String msg, String key) {
        String? res = null;
        try {
            RijndaelManaged aes = new RijndaelManaged();
            aes.KeySize = 256;
            aes.BlockSize = 128;
            aes.Mode = CipherMode.CBC;
            aes.Padding = PaddingMode.PKCS7;
            aes.Key = Encoding.UTF8.GetBytes(key);
            aes.IV = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };

            var encrypt = aes.CreateEncryptor(aes.Key, aes.IV);
            byte[]? xBuff = null;
            using (var ms = new MemoryStream())
            {
                using (var cs = new CryptoStream(ms, encrypt, CryptoStreamMode.Write))
                {
                    byte[] xXml = Encoding.UTF8.GetBytes(msg);
                    cs.Write(xXml, 0, xXml.Length);
                }

                xBuff = ms.ToArray();
            }

            res = Convert.ToBase64String(xBuff);
        } catch (Exception e) {
            res = null;
        }
        return res;
    }


    /*
        AES128 복호화
        msg = AES128 암호화 처리 된 문자열
        key = AES128 암호화에 사용한 16자리의 키 문자열
    */
    static String? AES128DEC(String msg, String key){
        String? res = null;
        try {
            RijndaelManaged aes = new RijndaelManaged();
            aes.KeySize = 256;
            aes.BlockSize = 128;
            aes.Mode = CipherMode.CBC;
            aes.Padding = PaddingMode.PKCS7;
            aes.Key = Encoding.UTF8.GetBytes(key);
            aes.IV = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };

            var decrypt = aes.CreateDecryptor();
            byte[]? xBuff = null;
            using (var ms = new MemoryStream())
            {
                using (var cs = new CryptoStream(ms, decrypt, CryptoStreamMode.Write))
                {
                    byte[] xXml = Convert.FromBase64String(msg);
                    cs.Write(xXml, 0, xXml.Length);
                }

                xBuff = ms.ToArray();
            }

            res = Encoding.UTF8.GetString(xBuff);
        } catch (Exception e) {
            res = null;
        }
        return res;
    }

    static void Main(){
        String oriMsg = "Hello World!!";
        String key = "1234qwerasdfzxcv";
        String encMsg = Util.AES128ENC(oriMsg, key);
        String decMsg = Util.AES128DEC(encMsg, key);
        Console.WriteLine("ENC : " + encMsg);
        Console.WriteLine("DEC : " + decMsg);
    }
}

 

ENC : bdT0Lda8mbcOdsewTU5mmQ==
DEC : Hello World!!

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/04   »
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
글 보관함