获得Windows密码服务环境(CSP Context)
原创文章标签 CryptAcquireContext CryptoAPI Windows密码服务 CSP 文章分类 运维
©著作权归作者所有:来自51CTO博客作者esafe的原创作品,请联系作者获取转载授权,否则将追究法律责任
Windows密码功能是由各种密码服务提供程序(CSP)所实现的,应用程序通过调用Windows API中的加密服务API(CryptoAPI)使用CSP所提供的加密/数字签名等密码服务。密码操作涉及用户密钥、加密算法代码等需要特别保护的资源,为此,Windows系统定义了一个安全的密码操作环境,即Cryptographic Service Provider Context。在应用程序中,代表此操作环境的是一个CSP句柄。
用CryptAcquireContext函数获取CSP句柄,是使用CryptoAPI的应用程序第一个CryptoAPI调用。返回的CSP句柄明确了使用CSP中的哪个密钥容器。该密钥容器要么是明确指定的,要么是当前登录用户的缺省密钥容器,必要时CryptAcquireContext可以创建一个新的密钥容器。.
加密服务提供程序(CSP)有名字和类型。例如,系统内置的加密服务提供程序Microsoft Base Cryptographic Provider是一个PROV_RSA_FULL类型的提供程序。每个CSP的名字是唯一的,而类型则不唯一。
调用CryptAcquireContext来获取CSP句柄时,需要根据所要进行的密码操作指定需要使用的CSP类型,CSP的名称则是可选的。如果两者都被指定,函数会按照所指定的名称和类型加载CSP。应用程序通过返回的CSP句柄及其中指定的密钥容器使用CSP提供的密码服务。如果仅指定了CSP类型,函数会先从登录用户的CSP列表、然后是计算机的CSP列表中查找一个类型符合的CSP名称,然后加载对应的CSP,返回其句柄。
CSP句柄使用完毕后,应使用CryptReleaseContext函数释放相关资源。
相关代码片段:
// 声明CSP句柄变量.
HCRYPTPROV hCryptProv;
// 获得缺省的PROV_RSA_FULL类型CSP的句柄.
if(CryptAcquireContext(
&hCryptProv,
NULL,
NULL, //使用缺省密钥容器
PROV_RSA_FULL,
0))
{
.......
}
// 如无缺省密钥容器,试图创建之。.
if(CryptAcquireContext(
&hCryptProv,
NULL,
NULL, //使用缺省密钥容器
PROV_RSA_FULL,
CRYPT_NEWKEYSET)) //创建密钥容器
{
........
}
... ...
//用hCryptProv使用CSP提供的加密/散列/数字签名等密码服务。
... ...
... ...
// 密码服务使用完毕,释放CSP句柄所关联的密码操作环境。.
if (CryptReleaseContext(hCryptProv, 0))
{
... ...
}
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
Windows用命令开启服务
网络系统管理服务器开启整理
Windows 服务开启