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

代碼片段和文件信息
#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文件,解密后的數(shù)據(jù)存儲(chǔ)到szDestination文件中
*/
BOOL?Dec::DecryptFile(
?????PCHAR?szSource???//密文文件名
?????PCHAR?szDestination?//解密后數(shù)據(jù)存儲(chǔ)文件
?????PCHAR?szPassword)??//口令,即密碼,其實(shí)口令和密碼是兩回事,了解一下就行了,作用一樣
{?
//--------------------------------------------------------------------
//?局部變量申明與初始化.
FILE?*hSource;?
FILE?*hDestination;?
HCRYPTPROV?hCryptProv;?
HCRYPTKEY?hKey;?
PBYTE?pbBuffer;?
DWORD?dwBlockLen;?
DWORD?dwBufferLen;?
DWORD?dwCount;?
BOOL?status?=?FALSE;?
?
//--------------------------------------------------------------------
//?打開(kāi)密文文件.?
if(!(hSource?=?fopen(szSource“rb“)))?
{
??cout<<“打開(kāi)密文文件出錯(cuò)!“< }
//--------------------------------------------------------------------
//?打開(kāi)目標(biāo)文件,用于存儲(chǔ)解密后的數(shù)據(jù).?
if(!(hDestination?=?fopen(szDestination“wb“)))
{
cout<<“打開(kāi)明文文件出錯(cuò)!“< }
//獲取加密服務(wù)者句柄
hCryptProv?=?GetCryptProv();
//獲取或創(chuàng)建會(huì)話密鑰
if(!szPassword||?strcmp(szPassword““)==0?)?
{?
//--------------------------------------------------------------------
//從密文文件導(dǎo)入保存的會(huì)話密鑰?
hKey?=?GenKeyFromFile(?hCryptProvhSource);
}?
else?
{?
//--------------------------------------------------------------------
//?通過(guò)輸入密碼重新創(chuàng)建會(huì)話密鑰.?
?
hKey=GenKeyByPassword(?hCryptProv?szPassword);
}?
?
//?計(jì)算一次解密的數(shù)據(jù)長(zhǎng)度,它是ENCRYPT_BLOCK_SIZE?的整數(shù)倍
dwBlockLen?=?1000?-?1000?%?ENCRYPT_BLOCK_SIZE;?
dwBufferLen?=?dwBlockLen;?
//--------------------------------------------------------------------
//?分配內(nèi)存空間.?
if(!(pbBuffer?=?(BYTE?*)malloc(dwBufferLen)))
{
??cout<<“所需內(nèi)存不夠!“< }
//--------------------------------------------------------------------
//?解密密文文件,解密后數(shù)據(jù)保存在目標(biāo)文件?
do?{?
//--------------------------------------------------------------------
//?每次從密文文件中讀取dwBlockLen字節(jié)數(shù)據(jù).?
dwCount?=?fread(
?pbBuffer?
?1?
?dwBlockLen?
?hSource);?
if(ferror(hSource))
{
cout<<“讀取密文文件出錯(cuò)!“< }
//--------------------------------------------------------------------
//?解密?數(shù)據(jù)
if(!CryptDecrypt(
??hKey?
??0?
??feof(hSource)?
??0?
??pbBuffer?
??&dwCount))
{
??cout<<“解密數(shù)據(jù)時(shí)出錯(cuò)!“< }
//--------------------------------------------------------------------
//?把解密后的數(shù)據(jù)寫(xiě)入目標(biāo)文件中.?
fwrite(
pbBuffer?
1?
dwCount?
hDestination);?
if(ferror(hDestination))
{
???cout<<“把解密后的數(shù)據(jù)寫(xiě)入目標(biāo)文件中時(shí)出錯(cuò)!“< }
}? while(!feof(hSource));?
status?=?TRUE;?
//--------------------------------------------------------------------
//?關(guān)閉文件
if(hSource)
{
if(f
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件????1004054??2010-05-06?23:00??加解密文件\測(cè)試截圖\解密圖片.bmp
?????文件?????988090??2010-05-06?22:59??加解密文件\測(cè)試截圖\加密圖片.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個(gè)文件信息
評(píng)論
共有 條評(píng)論