본문 바로가기
프로그래밍

암호화 복호화 모듈 만들기[C#]

by minimax95 2020. 6. 23.

이번 포스팅에서는 Two Way 암호화의 알고리즘인 DES(Data Encryption Standard)를 이용해서 간단한 암호화/복호화 모듈을 만들어 보겠습니다.

 

DES 알고리즘은 암호화 시 사용하는 암호키와 해독 시 사용하는 해독키가 동일한 특징을 가지고 있기 때문에 대칭키라고도 하며, 외부 사용자에게 절대 노출해서는 안 되는 비공개 키 알고리즘입니다.

특징은 평문을 64비트로 나눠 56비트의 키를 이용하여 다시 64비트의 암호문을 만들어 내는 암호 알고리즘으로 상세한 알고리즘 동작 과정은 생략하도록 하겠습니다.

 

여기서는 간단하게 콘솔 앱 형태로 DES 모듈을 사용하는 프로젝트를 만들어 보겠습니다.

먼저 아래와 같이 'DESTest' 이름으로 새 프로젝트를 만들고 생성된 DESTest 프로젝트에 우리가 사용할 DES 클래스를 추가해 줍니다.

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 암호화 복호화 모듈 만들기 포스팅을 마치도록 하겠습니다.

감사합니다.

댓글