C# UTF-8 문자열 Base64 인코딩/디코딩


C#에서는 System 네임스페이스의 Convert 클래스에서 기본적으로 Base64 문자열로 강제변환하는 메소드를 제공한다.
이는 다만 byte형식의 데이터만을 변환 가능하므로 문자열을 Base64로 변환하려면 문자열을 byte배열로 변환해서 사용해야 한다.
한글 문자열일 경우 텍스트인코딩 형식에 따라 깨짐현상이 발생할 수 있으므로 텍스트인코딩을 요즘 대부분 사용하는 UTF-8 형식으로 이러한 일련의 과정들을 사용하기 편리하도록 메소드로 구현 하였다.

using System;

namespace MyProject
{
    public class SecurityUtil
    {
        #region Base64
        public static string Base64Encode(string data)
        {
            try
            {
                byte[] encData_byte = new byte[data.Length];
                encData_byte = System.Text.Encoding.UTF8.GetBytes(data);
                string encodedData = Convert.ToBase64String(encData_byte);
                return encodedData;
            }
            catch (Exception e)
            {
                throw new Exception("Error in Base64Encode: " + e.Message);
            }
        }

        public static string Base64Decode(string data)
        {
            try
            {
                System.Text.UTF8Encoding encoder = new System.Text.UTF8Encoding();
                System.Text.Decoder utf8Decode = encoder.GetDecoder();

                byte[] todecode_byte = Convert.FromBase64String(data);
                int charCount = utf8Decode.GetCharCount(todecode_byte, 0, todecode_byte.Length);
                char[] decoded_char = new char[charCount];
                utf8Decode.GetChars(todecode_byte, 0, todecode_byte.Length, decoded_char, 0);
                string result = new String(decoded_char);
                return result;
            }
            catch (Exception e)
            {
                throw new Exception("Error in Base64Decode: " + e.Message);
            }
        }
        #endregion

        public static void Main(string[] args)
        {
            string testingStr = "가나다라마바사아자차카타파하";
            string encodedStr = SecurityUtil.Base64Encode(testingStr);
            string decodedStr = SecurityUtil.Base64Encode(encodedStr);
            Console.WriteLine(encodedStr);
            Console.WriteLine(decodedStr);
        }
    }
}

출처 :
https://m.blog.naver.com/PostView.nhn?blogId=csaiur&logNo=220224658525&proxyReferer=https%3A%2F%2Fwww.google.co.jp%2F
Previous
Next Post »