使用CryptoAPI编写一个文件保护程序,具有如下功能:
(1)给定明文文件,生成加密文件,同时产生文件的数字签名文件;
(2)给定密文文件,解密出明文文件,并验证签名的正确性。
代码:见所附main.cpp
一、
程序概况
a)
开发平台:Visual Studio 2005
b)
开发语言:C/C++
c)
使用密码库:CryptoAPI
二、
主要函数
a)
主函数
void main(void)
b)
加密文件
BOOL EncryptFile(PCHAR szSource, PCHAR szDestination, PCHAR szPassword);
c)
解密文件
BOOL DecryptFile(PCHAR szSource, PCHAR szDestination, PCHAR szPassword);
d)
签名文件
BOOL SignFile (PCHAR szSource, PCHAR szDestination);
e)
验证签名
BOOL VerifyFile (PCHAR szSource, PCHAR szDestination);
f)
错误处理
void HandleError(char *s);
三、
加密文件
a)
打开源文件
hSource = fopen(szSource,"rb")
b)
取得密钥容器(CSP)句柄
CryptAcquireContext(&hCryptProv,NULL,NULL,PROV_RSA_FULL,0)
c)
根据用户输入的密码创建一个会话密钥(即对称密钥,用于对原文件加密)
//创建一个Hash对象
CryptCreateHash(hCryptProv,CALG_MD5, 0, 0, &hHash)
//用用户输入的密码产生一个散列
CryptHashData(hHash, (BYTE *)szPassword, strlen(szPassword), 0)
//通过散列生成一个会话密钥
CryptDeriveKey(hCryptProv, ENCRYPT_ALGORITHM,hHash, KEYLENGTH, &hKey))
//销毁Hash对象
CryptDestroyHash(hHash);
注:会话密钥即对称密钥,用于对原文件进行加密;非对称密钥由于效