안녕하세요. 명월입니다.
이 글은 C#에서 Base64를 다루는 방법을 설명한 글입니다.
base64를 다루는 방법에 대해서 java에서 구현을 해봤는데 아무래도 자주 사용하는 함수이니 C#에서도 구현을 했습니다.
참조 - [Java] Base64 인코딩, 디코딩하는 방법
먼저 base64에 대해서 설명하겠습니다.
base64는 원래는 복잡한 이유와 설명이 있는 데 간단하게 설명하면 우리가 byte 형식으로 되어진 binary데이터를 프로그램 간에 좀 더 다루기 편하게 ascii코드로 이루어진 데이터를 base64라고 합니다.
더 간단하게 이야기 하면 「byte데이터나 stream 데이터를 string 형식으로 표시한 것입니다. 그러나 그 string형식도 encoding에 관계없는 ascii코드로 되어있다.」라고 알고 있으면 이해하기 쉽습니다.
먼저 간단한 파일을 읽어서 base64형식으로 변환하겠습니다.
제 pc의 d드라이브의 work라는 폴더에 hello world라고 작성한 텍스트 파일(test.txt)을 준비했습니다.
그리고 그걸 byte 형식으로 읽어 드려서 base64로 변환하겠습니다.
using System;
using System.IO;
namespace Example
{
class Program
{
static void Main(string[] args)
{
// d드라이브의 work라는 폴더의 test.txt 파일을 읽어드린다.
byte[] data = GetFileBinary("d:\\work\\test.txt");
// base64의 라이브러리에서 encodeToString를 이용해서 byte[] 형식을 String 형식으로 변환합니다.
var base64data = System.Convert.ToBase64String(data);
// 콘솔에 결과 출력
Console.WriteLine(base64data);
Console.WriteLine("Press any key...");
Console.ReadKey();
}
// 파일 읽어드리는 함수
private static byte[] GetFileBinary(String filepath)
{
var file = new FileInfo(filepath);
var data = new byte[file.Length];
using (var stream = new FileStream(file.FullName, FileMode.Open, FileAccess.Read))
{
stream.Read(data, 0, (int)data.Length);
}
return data;
}
}
}
실행 결과 아래와 같은 결과를 얻었습니다.
그럼 다시 base64로 된 String형식의 데이터를 byte[] 형식으로 읽어서 출력하겠습니다.
class Program
{
static void Main(string[] args)
{
// 위에서 인코딩했던 base64데이터 입니다.
String base64data = "SGVsbG8gd29ybGQ=";
// byte형식으로 디코딩합니다.
byte[] data = System.Convert.FromBase64String(base64data);
// 결과를 보기 위해 String으로 변환 후 출력하겠습니다.
Console.WriteLine(Encoding.Default.GetString(data));
Console.WriteLine("Press any key...");
Console.ReadKey();
}
}
실행 결과 아래와 같은 결과를 얻었습니다.
프로그램 간의 통신 시에 사실 base64로 인코딩, 디코딩을 해서 전송을 하면 byte 데이터가 늘어나기 때문에 비효율적이기는 합니다. 그대로 byte데이터를 전송하면 되기 때문이죠.
그러나 이 base64의 데이터가 필요할 때가 있긴 있습니다. 예를 들면 ajax로 파일 전송할 때등 말이죠.
[Jquery] ajax를 이용해 파일 업로드하는 방법 - https://nowonbun.tistory.com/475
또는 byte데이터를 그대로 보관하기는 그렇고 String형식으로 text의 파일로 저장할 때 등도 있습니다.(나름 보안입니다.)
C#으로 작성된 Base64의 인코딩, 디코딩 소개였습니다.
'Development note > C#' 카테고리의 다른 글
[C#] ini 환경 설정 파일을 다루는 방법 (0) | 2019.06.26 |
---|---|
[C#] 환경설정 파일을 다루는 방법(System.Configuration) (0) | 2019.06.26 |
[C#] Compare 함수의 결과 (0) | 2019.06.24 |
[C#] HttpConnection을 이용해서 웹 페이지 가져오기 (0) | 2019.06.20 |
[C#] 프로그램 실행 경로 (0) | 2019.06.13 |
[C#] NSoup 라이브러리 (XML, HTML 파서) (0) | 2019.06.06 |
[C#] Gecko 라이브러리 (웹 스크래핑) (3) | 2019.06.06 |
[C#] Zip 압축 코드 소스 (3) | 2019.06.03 |