원문 : http://www.codeproject.com/KB/security/aes.aspx
추가사항:
암호화 복호화될 자료는 키블럭(바이트)로 나누어 떨어져야함
파일 입출력시 해당파일이 키블럭단위로 떨어지지 않으면 추가 연산을 해주어야 한다
암호화할파일 : A
암호화된파일 : B
A의 크기가 키블럭 단위로 나누어 떨어지지 않으면 부족한 바이트를 추가하여 암호화 시켜서
B를 생성 시킨다
B를 복호화하면 그것은 A와 다른 크기의 파일이 생성되어버림
그래서 암호화내용에 추가사항을 넣어줌
암호화내용 = A의파일크기 + A파일의 내용 + 블락크기보정 바이트
다시 복호화 할때는 복호화 후 파일크기를 먼저 읽어와서 그 크기만큼만 읽어들여서 A로 복원한다(블락크기 보정 바이트는 읽지 않는다)
암호화
unsigned long orgFileSize = pFile->getFileSize();
unsigned long newFileSize = orgFileSize + sizeof(unsigned long);
if( (newFileSize % 16) > 0 )
{
newFileSize += 16 - (newFileSize % 16);
}
pFile->read( static_cast<void*>(pBufferIn + sizeof(orgFileSize)), pFile->getFileSize() );
pFile->close();
oRijndael.Encrypt(pBufferIn, pBufferEncrypt, newFileSize);
복호화
unsigned long decOrgFileSize;
oRijndael.Decrypt( pBufferEncrypt, pBufferOut, newFileSize);
memcpy_s( &decOrgFileSize, sizeof(decOrgFileSize), pBufferOut, sizeof(decOrgFileSize) );
if( pCreateFile->open( strNewFileName , baseLib::IFile::EFILE_OUT | baseLib::IFile::EFILE_BINARY | baseLib::IFile::EFILE_TRUNC ) )
{
pCreateFile->write( pBufferOut + sizeof(decOrgFileSize), decOrgFileSize );
pCreateFile->close();
}
'프로그래밍 팁' 카테고리의 다른 글
std::string 대소문자 바꾸기 (0) | 2010.09.10 |
---|---|
dir 구현 fileSerch (0) | 2010.09.10 |
평면 그리기 plane draw (0) | 2010.09.01 |
AdjustWindowRect, 윈도우 작업크기설정 (0) | 2010.08.31 |
마우스 좌표 얻기 (0) | 2010.08.31 |