日期:2011-03-22 13:55:00 来源:本站整理
Microsoft CryptoAPI加密技术(二)[VC/C++编程]
本文“Microsoft CryptoAPI加密技术(二)[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
上次我们讲了Microsoft CryptoAPI的构成以及会话密钥的利用.接下来我们将看一下公私密钥对的利用、HASH算法、数字签名等技术.
1、 公用密钥加密技术
公用密钥加密技术利用两个差别的密钥:公钥和私钥.私钥必须安全的保管好不能被外人知道,而公钥可以奉告任何人,只要他需求.普通公钥是以数字证书的情势公布的.
用公私密钥对中的一个密钥加密的数据只能用密钥对中的另一个密钥才能解密.也就是说用用户A的公钥加密的数据只能用A的私钥才能解密,一样,用A的私钥加密的数据只能用A的公钥才能解密.
假如用私钥签名一个消息,那么必须用与之对应的公钥去考证签名的有效性.
不幸的是公用密钥加密技术的效率非常低乃至只有对称加密的千分之一,所以不合适对大量的数据举行加密.实际上,公用密钥加密技术普通用来加密会话密钥,而数据加密可以用对称加密的办法.
好了,让我们回到Microsoft CryptoAPI.我们知道一个CSP有一个密钥库,这个密钥库有一个或多个密钥容器.而密钥容器中有什么呢?普通来说,一个密钥容器中有两对公私密钥对,一对用来加密会话密钥,而另一对用来举行数字签名,也就是大家知道的key exchange key pair和signature key pair.
那么,怎么得到这些密钥对呢?
if(CryptGetUserKey(
hCryptProv, // 我们已经得到的CSP句柄
AT_SIGNATURE, // 这里想得到signature key pair
&hKey)) // 返回密钥句柄
{
printf("A signature key is available.
");
}
else //取signature key pair错误
{
printf("No signature key is available.
");
if(GetLastError() == NTE_NO_KEY) //密钥容器里不存在signature key pair
{
// 成立 signature key pair.
printf("The signature key does not exist.
");
printf("Create a signature key pair.
");
if(CryptGenKey(
hCryptProv, //CSP句柄
AT_SIGNATURE, //成立的密钥对范例为signature key pair
0, //key范例,这里用默许值
&hKey)) //成立成功返回新成立的密钥对的句柄
{
printf("Created a signature key pair.
");
}
else
{
printf ("Error occurred creating a signature key.
");
}
}
else
{
printf ("An error other than NTE_NO_KEY getting signaturekey.
");
}
} // end if
将参数AT_SIGNATURE换成AT_KEYEXCHANGE便可以得到key exchange key pair.以上是“Microsoft CryptoAPI加密技术(二)[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |
评论内容只代表网友观点,与本站立场无关!
评论摘要(共 0 条,得分 0 分,平均 0 分)
查看完整评论