본문 바로가기

Developement/C/C++

EnCypher tool (AES256, BASE64) C++ library w/ Sample.

 EnCypher 라고 이름은 거창 하긴 합니다만, 단지 AES-256 과 BASE-64 를 이용하는 Front-end c++ class library 에 막 가져다 붙인 이름 입니다. 용도는 AES-256 으로 암호화 한 정보를 다시 BASE-64 로 인코딩 한 문자열을 만들거나, 반대로 처리 하는걸 만들수 있습니다.

 사용하려는 C++ 코드 위에 #inlcude "endetool.h" 를 추가 해 준 다음, EnDeTool class 를 할당해서 쓰면 됩니다. 여러 기능을 제공하고 있는데 주된 기능은 다음과 같습니다.

  • 문자열을 AES-256 과 BASE-64 로 암호화 또는 복호화
  • 단순 데이터를 AES-256 으로 암호화 또는 복호화

 아래의 소스코드는 바이너리 데이터를 암호/복호화 하는 것만 들어 있긴 합니다만 문자열 암호화는 보기보다 간단합니다.


EnDeTool    endetool;
std::string encodedstr;
const char  cryptkey[] = "ThisKeyIsHasEffectIfOver32Bytes..";

endetool.crytkey( cryptkey );
endetool.text( "Please crypting this words! ");
if ( endetool.encoded() == true )
{
	encodedstr = endetool.encodedtext();
	printf("Encoded text is: %s\n", encodedstr.c_str() );
	
	endetool.reset();
	endetool.crytkey( cryptkey );
	endetool.encodedtext( encodedstr.c_str() );
	
	printf("Decoded text is: %s\n", endetool.text() );
}


 먼저 cryptkey() 로 키를 설정 한 다음 (32자의 긴 문자열을 추천 합니다 ) 암호화시엔 text() 에 값을 넣고, encodedtext() 로 암호화된 문자열을 받을 수 있으며, 복호화는 그 반대로 하면 됩니다. 간단하죠.

 단, 사용하고 나서 메모리에 남아 있는 정보를 지우기 위해서는 반드시 reset() 을 호출해 주는 것이 좋습니다.


 소스코드는 아래의 7z 파일을 받아 쓰시면 됩니다만, 항상 그렇듯 이 소스코드는 Open 되는 만큼 이 코드를 사용하여 발생하는 문제나 효과에 대해서는 절대 제가 보증하지 않습니다. 그에 따라 이 소소코드를 수정, 재배포 하는 것은 자유 입니다.



EnCypher.7z



 위의 소스코드 (Code::Blocks 용 프로젝트와 소스, Release 안에 들어 있는 실행 파일과 테스트용 jpg 파일 하나) 압축을 받고 아무 위치에 풀면 bin/Release 폴더 안에 아래의 3개의 파일이 들어 있습니다.



 이 파일들은 아래의 옵션을 통해 CPU 부하 test 비슷하게 할수도 있습니다. 단지 MinGW 의 optimization 을 바꿔서 빌드 한 것입니다만 (64bit 지원) 그 차이가 약 8초~10초 정도 나게 됩니다.

 일반 옵션( expensive 까지 포함 ) 으로 빌드하되, CPU 를 지정하지 않았을 경우는 Windows7 에서 Core2Duo E6420(2.13GHz) 일 경우 700KB 가량의 JPEG 파일을 암호화 할 경우 약 18초가 걸렸습니다.



 하지만 일반옵션에 CPU 를 Intel Core2 로 맞춰서 빌드한 경우는 무려 8초가 줄어드는 기염을 토하는군요 !



 사실 CPU 사용량을 보면 내부 Core 수 만큼 도는게 보이긴 합니다만, 단순한 논리로만 생각 한다면 CPU 최적화 옵션에 따라 8초의 차이라면 2배의 큰 파일을 암호화 한다면 그에 상응하는 16초 차이가 만들어 지게 될듯 합니다.