이번 포스팅에서는 Two Way 암호화의 알고리즘인 DES(Data Encryption Standard)를 이용해서 간단한 암호화/복호화 모듈을 만들어 보겠습니다.
DES 알고리즘은 암호화 시 사용하는 암호키와 해독 시 사용하는 해독키가 동일한 특징을 가지고 있기 때문에 대칭키라고도 하며, 외부 사용자에게 절대 노출해서는 안 되는 비공개 키 알고리즘입니다.
특징은 평문을 64비트로 나눠 56비트의 키를 이용하여 다시 64비트의 암호문을 만들어 내는 암호 알고리즘으로 상세한 알고리즘 동작 과정은 생략하도록 하겠습니다.
여기서는 간단하게 콘솔 앱 형태로 DES 모듈을 사용하는 프로젝트를 만들어 보겠습니다.
먼저 아래와 같이 'DESTest' 이름으로 새 프로젝트를 만들고 생성된 DESTest 프로젝트에 우리가 사용할 DES 클래스를 추가해 줍니다.
먼저 아래와 같이 암호화/복호화 구분을 위해 enum을 만들어 줍니다.
public enum DesType
{
Encrypt = 0, // 암호화
Decrypt = 1 // 복호화
}
DES 모듈을 상속받는 DESCryptoServiceProvider를 선언해 주고 아래와 같이 생성자에서 초기화시켜줍니다.
이때 사용되는 Key는 항상 8자리로 고정되어야 합니다.
그리고 우리가 사용할 암호화/복호화 모듈의 핵심은 DesResult( ) 함수를 아래와 같이 만들어 줍니다.
public string DesResult(DesType type, string input)
{
var ms = new MemoryStream();
try
{
ICryptoTransform itransform = type.Equals(DesType.Encrypt) ? desProvider.CreateEncrypor( ) :
desProvider.CreateDecryptor();
byte[] data = type.Equals(DesType.Encrypt) ? Encoding.UTF8.GetBytes(input.ToCharArray()) :
Convert.FromBase64String(input);
CryptoStream cryptoStream = new CryptoStream(ms, iTransform, CryptoStreamMode.Write);
cryptoStream.Write(data, 0, data.Length);
cryptoStream.FlushFinalBlock( );
}
catch(Exception ex)
{
Console.WriteLine(ex.ToString());
}
return type.Equals(DesType.Encrypt) ? Convert.ToBase64String(ms.ToArray()) :
Encoding.UTF8.GetString(ms.GetBuffer());
}
이제 Console 앱 메인에서 우리가 만든 DES 클래스 객체를 생성해 주고 이를 통해서 암호화 및 복호화 테스트를 진행해 보겠습니다.
대칭키로 "DESTest!" 8자리 키를 사용하였습니다.
우리가 테스트할 문장은 "123 가나다"입니다.
des 객체의 DesResult( ) 함수 호출 시 enum인 DesType과 string 인자를 넣어주면 아래와 같이 암호화 및 복호화된 실행 결과를 얻을 수 있습니다.
이상으로 DES 암호화 복호화 모듈 만들기 포스팅을 마치도록 하겠습니다.
감사합니다.
'프로그래밍' 카테고리의 다른 글
IComparer를 이용한 개체 비교 (0) | 2020.07.08 |
---|---|
개체 비교 함수 (0) | 2020.07.07 |
[C#] 파일정보 로딩하여 Excel로 저장하기 (3) | 2020.06.17 |
[C#]DateTime과 TimeSpan, Stopwatch 사용하기 (0) | 2020.06.15 |
[c#]트레이 아이콘(Tray Icon) 적용하기 (2) | 2020.06.11 |
댓글