#define SAIO_CSP "SAIO SignCSP"
typedef enum Em_Algorithm_TYPE
{
AlgorithmType_SHA1 = 1,
AlgorithmType_SHA256 = 2
}ALGORITHM_TYPE, *PALGORITHM_TYPE;
BOOL GetFileHashParam(LPCSTR lpszCataFileName, PBYTE pbyHash, PDWORD pdwHashLen, ALGORITHM_TYPE emAlAlgorithmType)
{
BOOL bRet = FALSE;
HCRYPTPROV hProv = 0;
HCRYPTHASH hHash = 0;
HCRYPTKEY hKey = 0;
HANDLE hFile = NULL;
DWORD dwFileSize = 0, len;
BYTE byTempBuf[2049] = {0};
hFile = CreateFile(lpszCataFileName, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (INVALID_HANDLE_VALUE == hFile)
{
return FALSE;
}
DWORD dwProvType = PROV_RSA_AES;
ALG_ID hashAlgo = CALG_SHA_256;
if (AlgorithmType_SHA1 == emAlAlgorithmType)
{
dwProvType = PROV_RSA_FULL;
hashAlgo = CALG_SHA1;
}
if (!CryptAcquireContext(&hProv, SAIO_CSP, NULL, dwProvType, 0))
{
if (GetLastError() == NTE_BAD_KEYSET)
{
if(!CryptAcquireContext(&hProv,SAIO_CSP,NULL, PROV_RSA_FULL, CRYPT_NEWKEYSET))
{
goto HashExit;
}
}
}
//
// Create a hash object.
//
DWORD dwError = 0;
if ( !CryptCreateHash(hProv, hashAlgo ,0 ,0 ,&hHash))
{
dwError = GetLastError();
goto HashExit;
}
dwFileSize = GetFileSize(hFile, NULL);
while(dwFileSize != 0)
{
bRet = ReadFile(hFile, byTempBuf, 2048, &len, NULL);
//
// Check for end of file.
//
if (bRet && len==0)
{
break;
}
CryptHashData(hHash, byTempBuf, len, 0);
dwFileSize -= len;
}
if (hFile != NULL)
{
CloseHandle(hFile);
}
len = 0;
DWORD dwCount = sizeof(DWORD);
if(!CryptGetHashParam(hHash, HP_HASHSIZE, (BYTE*)pdwHashLen, &dwCount, 0))
{
*pdwHashLen = 0;
}
else
{
if (!CryptGetHashParam(hHash, HP_HASHVAL, pbyHash, pdwHashLen, 0))
{
*pdwHashLen = 0;
}
}
if (*pdwHashLen != 20
&& *pdwHashLen != 32)
{
bRet = FALSE;
}
HashExit:
if (hKey != NULL)
{
CryptDestroyKey(hKey);
}
if (hHash != NULL)
{
CryptDestroyHash(hHash);
}
if (hProv != NULL)
{
CryptReleaseContext(hProv, 0);
}
return bRet;
}
分享到:
相关推荐
VC++中调用微软Crypt API 加密
在这个DEMO中,开发者使用C语言编写了代码来调用SQLite的API,实现了对数据库文件的加密和解密功能。 首先,我们需要理解SQLite的加密机制。SQLite提供了一种称为SQLite Encryption Extension (SEE) 的加密方案,它...
AR Crypt是一款数据加密工具,主要用于保护用户的文件和数据安全。这款软件的核心功能是对文件进行加密,确保只有拥有正确密钥的人才能访问这些内容。在"AR Crypt.rar"这个压缩包中,包含的主要文件是"AR Crypt.exe...
Linux加密文件系统(Crypt-FS)是针对物理安全问题而设计的一种技术,旨在保护存储在计算机中的敏感数据免受未经授权的访问。当操作系统允许通过软盘或其他启动媒介引导时,物理接触计算机的攻击者可以绕过正常的...
#pragma comment( lib, "Dnsapi.lib" ) #pragma comment( lib, "Secur32.lib" ) #pragma comment( lib, "Crypt32.lib" ) #pragma comment( lib, "ws2_32.lib" )
CryptCD 5.0 的一大亮点是它能将加密后的文件伪装成.exe文件。这种伪装技术使得非授权用户即使获取到文件,也难以识别其真实性质,大大提升了数据的安全性。同时,这种伪装方式也降低了被恶意软件或病毒攻击的风险...
CRYPT32提供了API,使得开发者可以利用它来实现对字符串的安全操作,包括但不限于RSA、DES、AES等加密算法。 "不可视构件"和"控件"通常是指在图形用户界面(GUI)开发中,那些不直接显示在屏幕上的组件。虽然CRYPT...
在Linux系统中,`/etc/shadow`文件包含了用户的加密密码,`crypt-md5`生成的hash值就保存在这个文件中。当用户尝试登录时,系统会使用`crypt`函数和用户输入的密码尝试解密`/etc/shadow`中的hash值,如果匹配成功,...
Windows API提供了一套名为“Crypt32.dll”的动态链接库,其中包含了一些用于加密和解密的函数,如` CryptCreateHash`, `CryptHashData`, `CryptGetHashParam`等,这些可以用来实现MD5哈希计算。 以下是使用VB6.0...
SQLite Crypt的工作原理是在数据写入数据库时对其进行加密,并在读取时解密,确保即使数据库文件被窃取,其中的内容也无法被轻易解读。 在使用SQLite Crypt时,首先要了解它的加密算法。通常,它会采用先进的加密...
本文将深入探讨“crypt_file.rar_文件驱动加密”这一主题,包括其工作原理、应用以及如何进行学习和测试。 首先,我们要理解什么是文件驱动加密。在Windows操作系统中,文件系统过滤驱动(File System Filter ...
`filter.ini`, `crypt.ini`, `compress.ini`, `filterfile.ini`, `filtermsg.ini`, 和 `filterhp.ini`这些文件是配置文件,很可能用于定义Hook的规则或者过滤条件。例如,`filterfile.ini`可能包含了文件操作的Hook...
《Cl_crypt32.pas Delphi 加密解密模块详解》 在计算机科学领域,数据的安全性至关重要,加密和解密技术就是保障信息安全的重要手段。本文将详细讲解Delphi编程语言中的Cl_crypt32.pas模块,该模块主要用于32位的...
标题 "Crypt-RC4-2.02.tar.gz" 提供了有关文件的基本信息,它是一个使用GNU Tape Archive (GZIP) 压缩格式的文件,其中包含了一个名为 "Crypt-RC4-2.02" 的软件或库。这个版本号(2.02)暗示了这是一个软件的更新...
它提供了丰富的API,允许开发者选择不同的加密算法,如AES(高级加密标准)、RSA(公钥加密技术)等,以满足不同场景的安全需求。 Lib Sodium,另一方面,是一个现代的、易于使用的密码学库,旨在简化安全编码。它...
Linux加密文件系统,如Crypt-FS,是一种针对操作系统内核级别的数据保护机制,旨在确保敏感信息在物理层面的安全。在Linux环境下,加密文件系统提供了一种透明的方式,使得用户在正常使用文件系统的同时,数据能够在...
由于只给出了一个文件名 "crypt-C++-library",我们可以假设这是库的主文件或者包含库源代码的压缩文件。通常,这样的文件会包含库的所有源代码文件、头文件、编译脚本、示例代码、README文档以及可能的构建系统配置...
rdp python加密脚本 远程桌面通过RDP文件自动登录 此脚本把密码明文加密成密文 用于直接远程连接
crypt-md5源代码,这是linux里面最常用密码校验算法,这里拿出来和大家一起分享
Git-Crypt是一款强大的工具,它允许在Git仓库中对敏感数据进行加密,同时保持其他文件的版本控制功能不受影响。这个源码压缩包"Git-Crypt-源码.rar"(实际上应该是Git-Crypt-源码.zip)包含了Git-Crypt的源代码,...