window下的自解壓加解密打包程序

引子

實現自解壓的文件加密和解密。

要求和設計

界面操作,獨立執行文件,尺寸夠小,能夠自解壓。

實現思路:打包程序可以對文件進行加密和解密。同時支持生成自解壓程序的能力。

生成自解壓的過程是:打包程序對目標文件進行加密,釋放出自解壓程序並追加加密後的內容,形成包含加密後內容的可執行文件。

自解壓的過程是:自解壓程序執行時,對包含的加密信息進行解密,並生成解密後的文件。

選用原生的window api,加解密選用wincrypt

實現

界面實現

打包程序界面

自解壓程序界面

加密文件

int FPCrypt::EncryptFile(LPWSTR szSrcFile, LPWSTR szToFile)
{
int iReturn = 0;
bool fEOF = FALSE;
HANDLE hSrcFile = INVALID_HANDLE_VALUE;
HANDLE hDestFile = INVALID_HANDLE_VALUE;
PBYTE pbBuffer = NULL;
DWORD dwBufferLen = 0;
DWORD dwCount = 0;

hSrcFile = CreateFile(szSrcFile, FILE_READ_DATA, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (INVALID_HANDLE_VALUE == hSrcFile)
{
iReturn = 9001;
goto Exit_MyEncryptFile;
}

hDestFile = CreateFile(szToFile, FILE_WRITE_DATA, FILE_SHARE_READ, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if (INVALID_HANDLE_VALUE == hDestFile)
{
iReturn = 9001;
goto Exit_MyEncryptFile;
}

dwBufferLen = dwBlockLength + ENCRYPT_BLOCK_SIZE;
pbBuffer = (BYTE*)malloc(dwBufferLen);

do
{
if (!ReadFile(hSrcFile, pbBuffer, dwBlockLength, &dwCount, NULL))
{
iReturn = 9008;
goto Exit_MyEncryptFile;
}
if (dwCount < dwBlockLength)
{
fEOF = TRUE;
}
if (!CryptEncrypt(hKey, NULL, fEOF, 0, pbBuffer, &dwCount, dwBufferLen))
{
iReturn = 9009;
goto Exit_MyEncryptFile;
}
if (!WriteFile(hDestFile, pbBuffer, dwCount, &dwCount, NULL))
{
iReturn = 9010;
goto Exit_MyEncryptFile;
}
} while (!fEOF);

Exit_MyEncryptFile:

if (pbBuffer)
{
free(pbBuffer);
}
if (hSrcFile)
{
CloseHandle(hSrcFile);
}
if (hDestFile)
{
CloseHandle(hDestFile);
}
return iReturn;
}

发表回复

相关推荐

C盘满了怎么清理?最全c盘清理攻略!

电脑c盘对我们来说真的是很重要。当我们在电脑上安装软件、存储文件或者浏览网站,其实都会悄悄地占用c盘的空间,从而导致c ...

· 1分钟前

揭秘:X-傳習營香港站對話嘉賓

百年香江,成長起無數華人巨商,他們歷經時代變遷,經過數代傳承,依然生機蓬勃。帶著對他們的崇敬,帶著對他們幾經沉浮卻基...

· 2分钟前

C語言基礎:運算符和表達式

一、算數運算符和算數表達式 基本的算數運算符包括加減乘除四則運算符和求餘運算符:+:加法運算符,雙目運算符,雙目運算...

· 2分钟前

《光武大帝》

第一章 龍的傳人西漢文帝時期,國傢安定,經濟繁榮,人民安居樂業,長安城內一片歌舞升平。一天,文帝太子劉啟(漢景帝)喝點...

· 2分钟前

為什麼別人想吃啥就吃啥、我一吃點刺激性食物胃就不舒服?

你有沒有遇到過這樣的一種人(抑或是你自己就是這樣的人)——吃不瞭刺激性食物,包括但不限於、辣的、冷的、生的等等,甚至連...

· 3分钟前

Copyright 2015-2025 www.icpchaxun.com ©All Rights Reserved.