hwp 배포 문서는 공개된 정보를 통하여 알아냈습니다.
하지만 hwpx 배포 문서에 대한 정보가 없어서 여러번 시도를 해 보았지만 실패하였습니다.
하여 한글과커뮤터에 여러번 문의하였습니다. 실패하였습니다.
하여 hwpx 배포 문서에 대한 정보를 얻고자 문의 드립니다.
아래 부분은 저희가 시도한 내용을 정리한 내용인데 이 부분이 도움이 될지는 모르겠지만
시도 결과 실패를 하였습니다.
*****************************************************************
Zip 내부의 암호화 파일 엔트리는 압축되어 있지 않습니다.
그것을 그대로 가져다가
Salt , iV 는 base64 디코딩하여 구함.
key 는 다음과 같이 처리…
const char* pFix = "\"Yang WangSunv!!\""; int nFix = strlen(pFix);
BrBYTE passbuffer[64] = { 0, };
BrBYTE keybuffer[64] = { 0, };
// password key 생성
HNC_SHA256_ALG_INFO sha256;
HNC_SHA256_Init(&sha256);
HNC_SHA256_Update(&sha256, (BYTE*)pFix, nFix );
HNC_SHA256_Final(&sha256, passbuffer);
HNC_PBKDF2_SHA1((const char*)passbuffer, 32, (const char*)salt.data(), salt.size(), 1024, (char*)keybuffer, 32);
key.assign(keybuffer, keybuffer + 32);
그런 후에 아래 코드를 돌린다.
Unsigned char* decrypted_data = (Unsigned char* )malloc( nCipherTextSize + 16);
EVP_CIPHER_CTX* ctx = EVP_CIPHER_CTX_new();
if( 1 != EVP_DecryptInit_ex(ctx, EVP_aes_256_cbc(), NULL, key.data(), iv.data()) )
{
goto endDecript;
}
EVP_CIPHER_CTX_set_padding(ctx, 0);
if( 1 != EVP_DecryptUpdate(ctx, decrypted_data, &outlen, pCipherText, nCipherTextSize) )
{
goto endDecript;
}
if( 1!=EVP_DecryptFinal_ex(ctx, decrypted_data + outlen, &tmplen))
{
goto endDecript;
}
Int final_len = out_len + tmplen;
decrypted_data 에 final_len 길이의 복호화 된 데이터가 된다.
이후 이 데이터를 inflate_init( &stream , -15 ); 를 통해 해더 없는 압축데이타 인플레이트를 시도하여 텍스트를 추출한다.
이상이 저희가 한컴 공개 문서를 통해 이해한 사항입니다.
위 처리 과정중에 잘못된 것이 있는지 텍스트 추출에 실패 합니다.
***************************************************************************