-
大小: 3.28MB文件類型: .rar金幣: 2下載: 0 次發布日期: 2023-09-14
- 語言: C/C++
- 標簽:
資源簡介
/*
*由于多方嘗試并編寫Openssl對文件的加解密方法,均以失敗告終,所以我們小組絕對采用新的加密算法,即Windows CrytoAPI,由微軟公司提出的一種安全
*加密應用服務框架
*CryptoAPI數據加解密,它的流程為:
*(加密模塊)1.創建會話密鑰 2.加密數據 3.安全保存或交換會話密鑰
*(解密模塊)1.獲取會話密鑰 2.解密數據
*它的加密是基于對稱加密算法的(對稱算法加密解密速度快),對文件的讀取都要用的c語言的方法,c++的文件讀取功能不好用啊
*經過測試,該算法可以對txt/doc進行加解密,其他我還沒測試,你們可以試試其他文本類型看看
*/

代碼片段和文件信息
#ifndef?_WIN32_WINNT
#define?_WIN32_WINNT?0x0400
#endif?
#include?
#include?
#include?
#include?
#include?
#include?
#define?MY_ENCODING_TYPE??(PKCS_7_ASN_ENCODING?|?X509_ASN_ENCODING)
#define?KEYLENGTH??0x00800000
#define?ENCRYPT_ALGORITHM?CALG_RC4?
#define?ENCRYPT_BLOCK_SIZE?8?
#include?
#include?“Dec.h“
/*
功能:解密密文szSource文件,解密后的數據存儲到szDestination文件中
*/
BOOL?Dec::DecryptFile(
?????PCHAR?szSource???//密文文件名
?????PCHAR?szDestination?//解密后數據存儲文件
?????PCHAR?szPassword)??//口令,即密碼,其實口令和密碼是兩回事,了解一下就行了,作用一樣
{?
//--------------------------------------------------------------------
//?局部變量申明與初始化.
FILE?*hSource;?
FILE?*hDestination;?
HCRYPTPROV?hCryptProv;?
HCRYPTKEY?hKey;?
PBYTE?pbBuffer;?
DWORD?dwBlockLen;?
DWORD?dwBufferLen;?
DWORD?dwCount;?
BOOL?status?=?FALSE;?
?
//--------------------------------------------------------------------
//?打開密文文件.?
if(!(hSource?=?fopen(szSource“rb“)))?
{
??cout<<“打開密文文件出錯!“< }
//--------------------------------------------------------------------
//?打開目標文件,用于存儲解密后的數據.?
if(!(hDestination?=?fopen(szDestination“wb“)))
{
cout<<“打開明文文件出錯!“< }
//獲取加密服務者句柄
hCryptProv?=?GetCryptProv();
//獲取或創建會話密鑰
if(!szPassword||?strcmp(szPassword““)==0?)?
{?
//--------------------------------------------------------------------
//從密文文件導入保存的會話密鑰?
hKey?=?GenKeyFromFile(?hCryptProvhSource);
}?
else?
{?
//--------------------------------------------------------------------
//?通過輸入密碼重新創建會話密鑰.?
?
hKey=GenKeyByPassword(?hCryptProv?szPassword);
}?
?
//?計算一次解密的數據長度,它是ENCRYPT_BLOCK_SIZE?的整數倍
dwBlockLen?=?1000?-?1000?%?ENCRYPT_BLOCK_SIZE;?
dwBufferLen?=?dwBlockLen;?
//--------------------------------------------------------------------
//?分配內存空間.?
if(!(pbBuffer?=?(BYTE?*)malloc(dwBufferLen)))
{
??cout<<“所需內存不夠!“< }
//--------------------------------------------------------------------
//?解密密文文件,解密后數據保存在目標文件?
do?{?
//--------------------------------------------------------------------
//?每次從密文文件中讀取dwBlockLen字節數據.?
dwCount?=?fread(
?pbBuffer?
?1?
?dwBlockLen?
?hSource);?
if(ferror(hSource))
{
cout<<“讀取密文文件出錯!“< }
//--------------------------------------------------------------------
//?解密?數據
if(!CryptDecrypt(
??hKey?
??0?
??feof(hSource)?
??0?
??pbBuffer?
??&dwCount))
{
??cout<<“解密數據時出錯!“< }
//--------------------------------------------------------------------
//?把解密后的數據寫入目標文件中.?
fwrite(
pbBuffer?
1?
dwCount?
hDestination);?
if(ferror(hDestination))
{
???cout<<“把解密后的數據寫入目標文件中時出錯!“< }
}? while(!feof(hSource));?
status?=?TRUE;?
//--------------------------------------------------------------------
//?關閉文件
if(hSource)
{
if(f
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????1004054??2010-05-06?23:00??加解密文件\測試截圖\解密圖片.bmp
?????文件?????988090??2010-05-06?22:59??加解密文件\測試截圖\加密圖片.bmp
?????文件????????524??2010-05-06?19:42??加解密文件\DecAndEnc\DecAndEnc.dsw
?????文件??????82944??2010-10-09?00:06??加解密文件\DecAndEnc\DecAndEnc.ncb
?????文件???????1328??2010-05-06?22:56??加解密文件\DecAndEnc\DecAndEnc.plg
?????文件????????582??2010-05-06?20:23??加解密文件\DecAndEnc\Enc.h
?????文件???????1083??2010-05-06?21:19??加解密文件\DecAndEnc\get_mac.cpp
?????文件???????1860??2010-05-06?21:39??加解密文件\DecAndEnc\get_mac.h
?????文件???????4549??2010-05-06?22:20??加解密文件\DecAndEnc\DecAndEnc.dsp
?????文件???????7106??2010-05-06?22:34??加解密文件\DecAndEnc\Dec.cpp
?????文件????????718??2010-05-06?22:34??加解密文件\DecAndEnc\Dec.h
?????文件???????6747??2010-05-06?22:36??加解密文件\DecAndEnc\Enc.cpp
?????文件??????????0??2010-05-06?22:55??加解密文件\DecAndEnc\e.txt
?????文件???????4125??2010-05-06?22:56??加解密文件\DecAndEnc\test.cpp
?????文件?????599040??2010-05-06?22:56??加解密文件\DecAndEnc\Debug\DecAndEnc.pdb
?????文件?????295936??2010-05-06?22:58??加解密文件\DecAndEnc\Debug\vc60.idb
?????文件??????94208??2010-05-06?22:56??加解密文件\DecAndEnc\Debug\vc60.pdb
?????文件??????12568??2010-05-06?21:19??加解密文件\DecAndEnc\Debug\get_mac.obj
?????文件????1067298??2010-05-06?22:34??加解密文件\DecAndEnc\Debug\Dec.sbr
?????文件????1067056??2010-05-06?22:36??加解密文件\DecAndEnc\Debug\Enc.sbr
?????文件????1066843??2010-05-06?22:56??加解密文件\DecAndEnc\Debug\test.sbr
?????文件????3220480??2010-05-06?21:43??加解密文件\DecAndEnc\Debug\DecAndEnc.bsc
?????文件?????229435??2010-05-06?22:56??加解密文件\DecAndEnc\Debug\DecAndEnc.exe
?????文件??????25927??2010-05-06?22:34??加解密文件\DecAndEnc\Debug\Dec.obj
?????文件?????309080??2010-05-06?22:56??加解密文件\DecAndEnc\Debug\DecAndEnc.ilk
?????文件??????24675??2010-05-06?22:36??加解密文件\DecAndEnc\Debug\Enc.obj
?????文件????5035792??2010-05-06?22:36??加解密文件\DecAndEnc\Debug\DecAndEnc.pch
?????文件??????23206??2010-05-06?22:56??加解密文件\DecAndEnc\Debug\test.obj
?????文件??????68608??2010-10-09?00:06??加解密文件\DecAndEnc\DecAndEnc.opt
?????目錄??????????0??2010-05-06?23:01??加解密文件\DecAndEnc\Debug
............此處省略6個文件信息
- 上一篇:已編譯的GDAL gdal111
- 下一篇:sbc codec的C++實現
評論
共有 條評論