设为首页
加入收藏
网站地图
动力论坛
今天:
维修首页 服务流程 服务项目 服务报价 网上学堂 购机指南 电脑优化 软件下载 技术交流
最新动态

热烈庆祝芯动力在@世界06年
@世界电脑城3周年庆典活动
国庆芯动力电脑连锁机构
国庆芯动力电脑连锁机构
芯动力数据恢复中心升级成
芯动力数据恢复中心升级成
More..

028-85353216 028-66742224
点击这里给我发消息 点击这里给我发消息
就业服务热线:

028-85350886

edu@cdwxw.net

三星COMBO时尚首选
一分钟教你辨别返修硬盘
硬件学堂之---谈超频的概念
内存品质的细微体现
AMD Athlon64处理器实际运
More...

手工彻底清除Backdoor.PWS
宽带时代的防毒措施
11.27预警:监控登陆窗口窃
光华反病毒资讯(11.27-12.
“USB间谍”变种a
更多...

用“替换法”“对照法”处
随机性死机故障分析与排除
全面深入了解电脑死机的原
“蓝屏”的原因及处理方法
黑屏的几个原因
电脑死机原因大全
更多...

当前位置:

首页>>电脑维修>>网络学堂>>软件故障>>其它软件>>正文

简单实现强大的加密功能——CryptoAPI


来源:不详  作者:未知  点击数:
 

if(ENCRYPT_BLOCK_SIZE > 1) {
dwBufferLen=dwBlockLen + ENCRYPT_BLOCK_SIZE;
} else {
dwBufferLen = dwBlockLen;
}
//分配缓冲区
pbBuffer = malloc(dwBufferLen);
//加密源文件并写入目标文件
do {
// 从源文件中读出dwBlockLen个字节
dwCount = fread(pbBuffer, 1, dwBlockLen, hSource);
eof = feof(hSource);
//加密数据
CryptEncrypt(hKey, 0, eof, 0, pbBuffer, &dwCount, dwBufferLen);
// 将加密过的数据写入目标文件
fwrite(pbBuffer, 1, dwCount, hDestination);
} while(!feof(hSource));
printf("OK\n");
......//关闭文件、释放内存
}
----2 文件解密

void CAPIDecryptFile(PCHAR szSource,
PCHAR szDestination, PCHAR szPassword)
{
 ......//变量声明、文件操作同文件加密程序

CryptAcquireContext(&hProv, NULL, NULL,
PROV_RSA_FULL, 0);
if(szPassword == NULL) {
// 口令为空,使用存储在加密文件中的会话密钥解密
// 读隐码的长度并分配内存
fread(&dwKeyBlobLen,sizeof(DWORD),1,hSource);
pbKeyBlob=malloc(dwKeyBlobLen))== NULL);
// 从源文件中读隐码.
fread(pbKeyBlob, 1, dwKeyBlobLen, hSource);
// 将隐码输入CSP
CryptImportKey(hProv, pbKeyBlob,
dwKeyBlobLen, 0, 0, &hKey);
} else {
// 口令不为空, 使用从口令派生出的密钥解密文件
CryptCreateHash(hProv, CALG_MD5, 0, 0, &hHash);
CryptHashData(hHash, szPassword, strlen
(szPassword), 0);
CryptDeriveKey(hProv, ENCRYPT_ALGORITHM,
hHash, 0, &hKey);
CryptDestroyHash(hHash);
hHash = 0;
}

dwBlockLen=1000-1000%ENCRYPT_BLOCK_SIZE;
if(ENCRYPT_BLOCK_SIZE > 1) {
 dwBufferLen = dwBlockLen + ENCRYPT_BLOCK_SIZE;
} else {
 dwBufferLen = dwBlockLen;
}
pbBuffer = malloc(dwBufferLen);

//解密源文件并写入目标文件
do {
dwCount = fread(pbBuffer, 1, dwBlockLen,
hSource);
eof = feof(hSource);
// 解密数据
CryptDecrypt(hKey, 0, eof, 0, pbBuffer, &dwCount);
// 将解密过的数据写入目标文件
fwrite(pbBuffer, 1, dwCount, hDestination);
} while(!feof(hSource));
printf(“OK\n");
......//关闭文件、释放内存
}
----以上代码在Windows 2000、Visual C++6.0环境中编译通过。

本新闻共2页,当前在第2页  1  2  

  下一篇:把图象文件转换成XML格式文件

上一篇:电脑排障实录之浏览器故障篇

  相关内容
 
SAM文件基础知识
把图象文件转换成XML格式文件
关于我们|版权申明|广告服务网站地图友情链接人才招聘