資源簡介
crytoapi用于信息的加密傳輸,收方通過解密代碼進行解密。是一種很通用的加解密方式。
代碼片段和文件信息
#include?
#include?
#define?_WIN32_WINNT?0X0400
#include?
#include?
#define?MY_ENCODING_TYPE??(PKCS_7_ASN_ENCODING?|?X509_ASN_ENCODING)
#define?KEYLENGTH??0x00800000
#define?ENCRYPT_ALGORITHM?CALG_RC2?
#define?ENCRYPT_BLOCK_SIZE?8?
void?HandleError(char?*s);
BOOL?CryEncryptFile(
?PCHAR?szSource?
?PCHAR?szDestination?
?PCHAR?szPassword);?
BOOL?CryDecryptFile(
?PCHAR?szSource?
?PCHAR?szDestination?
?PCHAR?szPassword);?
//加密文件例子
void?jiami()
{
PCHAR?szSource;?
????PCHAR?szDestination;?
????PCHAR?szPassword;?
????char??response;
if(!(szSource=(char?*)malloc(100)))
HandleError(“malloc?失敗.“);
if(!(szDestination=(char?*)malloc(100)))
HandleError(“malloc?失敗.“);
if(!(szPassword=(char?*)malloc(100)))
HandleError(“malloc?失敗.“);
printf(“文件加密.?/n/n“);
printf(“請輸入待加密的文件:?“);
scanf(“%s“szSource);
printf(“請輸入保存密文的文件:?“);
scanf(“%s“szDestination);
printf(“使用口令加密文件嗎??(?y/n?)?“);
getchar();
scanf(“%c“&response);
if(response?==?‘y‘)
{
printf(“請輸入口令:“);
scanf(“%s“szPassword);
}
else
{
printf(“不使用口令,則使用隨機數作為密鑰。?/n“);
free(szPassword);
szPassword?=?NULL;
}
//--------------------------------------------------------------------
//?調用EncryptFile函數完成加密。
if(CryEncryptFile(szSource?szDestination?szPassword))
{
printf(“加密文件%s?成功.?/n“?szSource);
printf(“密文文件為?%s./n“szDestination);
}
else
{
HandleError(“加密文件失敗!“);?
}?
}
//解密文件例子
void?jiemi()
{
PCHAR?szSource;?
PCHAR?szDestination;?
PCHAR?szPassword;?
char??response;
if(!(szSource=(char?*)malloc(100)))
HandleError(“malloc?失敗.“);
if(!(szDestination=(char?*)malloc(100)))
HandleError(“malloc?失敗.“);
if(!(szPassword=(char?*)malloc(100)))
HandleError(“malloc?失敗.“);
printf(“文件解密.?/n/n“);
printf(“輸入待解密的文件名:?“);
scanf(“%s“szSource);
printf(“輸入明文保存文件名:?“);
scanf(“%s“szDestination);
printf(“是否使用口令加密的文件??(?y/n?)?“);
getchar();
scanf(“%c“&response);
if(response?==?‘y‘)
{
printf(“輸入口令:“);
scanf(“%s“szPassword);
}
else
{
printf(“沒有使用口令加密,加密密鑰以密文的形式保存在文件中。/n“);
free(szPassword);
szPassword?=?NULL;
}
if(!CryDecryptFile(szSource?szDestination?szPassword))
{
printf(“/n解密文件失敗.?/n“);?
}
else
{?
printf(“/n解密文件%s?成功?/n“?szSource);
printf(“解密后的文件保存為?%s?./n“szDestination);
}
}
/************************************************************************
函數功能:加密文件?????????????????????????????????????????????????????????????
參數:
szSource:[IN],待加密的明文文件路徑
szDestination:[IN]?加密后的密文文件路徑
szPassword:[IN]?口令
************************************************************************/
static?BOOL?CryEncryptFile(
????????PCHAR?szSource?
????????PCHAR?szDestination?
????????PCHAR?szPassword)
{
//變量聲明
FILE?*hSource; //待加密的明文文件句柄
FILE?*hDestination;?//密文文件句柄
HCRYPTPROV?hCryptProv;?//CSP句柄
HCRYPTKEY?hKey; //密鑰句柄
HCRYPTKEY?hXch
- 上一篇:avilib庫源C代碼
- 下一篇:C++面向對象程序設計 課后答案 鐵道出版社
評論
共有 條評論