关于cryptapi加密,怎样使用CA证书里的公/私匙?

primen 2001-08-22 10:30:01
加精
...全文
194 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
primen 2001-08-23
  • 打赏
  • 举报
回复
我看Platform SDK看了很久,我从证书服务器下载的证书是X.509的,私匙分开导出在.pvk文件中,证书安装后,是否可以用私匙签名,怎样做?
Netguy 2001-08-23
  • 打赏
  • 举报
回复
看看Platform SDK中的例子程序
hahadog 2001-08-23
  • 打赏
  • 举报
回复
我下面的方法是基于Windows2000 CA颁发的证书,按照你说的方式。

假设有1.cer和对应的1.pvk文件。其中1.pvk的密码是“1”。过程:
1,读入1.cer和1.pvk文件到pCertBuffer和pKeyBuffer,此时pKeyBuffer是一个PRIVATEKEYBLOB
2,CryptAcquireContext()新建一个KeyContainer
3,CryptCreateHash(), CryptHashData("1"), CryptDeriveKey(),得到一个hSessionKey
4,CryptImportKey(pKeyBuffer, hSessionKey...),导入私钥
5,CryptSetKeyParam(pCertBuffer)
此时,该证书可以通过CertMgr看到,可以用来签名。
hahadog 2001-08-22
  • 打赏
  • 举报
回复
一般来说,一个应用程序不需要自己去找密钥,是通过特定的CSP来进行的。每一个CSP对于密钥的存放和处理的方式也是不一样的。

根据证书,找到与该证书联系的私钥的过程是这样的:
CertCreateCertificateContext() -> CertGetCertificateProperties() -> CryptAcquireContext(OPEN_CONTAINER) -> CryptGetUserKey()
如果私钥已经标志成可以导出的话,此时可以得到公私钥对。但是如果私钥不可导出,那么就只能使用了。比如可以调用CryptDecrypt(),CryptSignHash(),CryptSignature()来使用。
primen 2001-08-22
  • 打赏
  • 举报
回复
用私匙签名的私匙?基于x.509的证书无私钥,而在.pvk文件中,又如何?
hahadog 2001-08-22
  • 打赏
  • 举报
回复
证书里没有私钥。
要获得证书的公钥,可以用:
CertCreateCertificateContext()
Context->CertInfo->CertPublicKeyInfo就是公钥了

9,506

社区成员

发帖
与我相关
我的任务
社区描述
Windows专区 安全技术/病毒
社区管理员
  • 安全技术/病毒社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧