求CryptoAPI签名所需要的步骤(非CryptSignMessage方法)

解决方案 »

  1.   

    http://www.vckbase.com/document/viewdoc/?id=974
    http://www.vckbase.com/document/viewdoc/?id=975
      

  2.   

    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/seccrypto/security/cryptography_functions.asp
      

  3.   

    看了还是不解,现在我得问题是,我手上有p12格式的证书,怎么利用它签名(使用CryptSignHash,摘要已经得到了)但是怎么使用这个p12中的私钥进行签名呢,而且我用CryptGetUserKey(AT_SIGNATURE)总是返回false。希望大家帮忙
      

  4.   

    安装证书(即把证书导入了证书库)
    用CryptSignMessage
    在我看来用CRYPTOAPI只能这么做
      

  5.   

    我得情况比较特殊,不能使用CryptSignMessage,我现在的想法是
    首先获得CSP;
    然后创建key container;
    把p12证书中的私钥导入刚才的key container中;
    接着做摘要&签名。
    不知我得想法是否能实现,请大家给意见以及代码级支持
      

  6.   

    这种做法在CryptoAPI中不支持,但你可以用另一种做法,先创建一个内存中的证书库,然后把P12证书导入(PFXImportCertStore,文档说2000以上支持,但微软讨论组中说IE5.0以上就支持,你自己试试看吧)这个证书库中,接着就可以和用普通证书一样使用了。
    另外一种办法就是拆P12了,但CryptoAPI不支持拆开,可以用OpenSSL来拆,拆开的私钥是PKCS#1编码,可以导入到Key Container中。
      

  7.   

    回复: shimate(史马特) 
    你说的第一种方法还是使用CryptSignMessage方法吗?
    能不能解释一下CryptAcquireCertificatePrivateKey&CryptAcquireContext的各用处?我现在有一张自己的P12证书,使用CryptAcquireCertificatePrivateKey获得CSP句柄,可是CryptGetUserKey获取AT_SIGNATURE时总是错误,为什么?我有私钥啊
      

  8.   

    第一种办法无论是低级函数(直接生成签名信息)还是高级函数(生成PKCS#7签名)都支持,我忘了你说的API是哪个了。
    CryptAcquireCertificatePrivateKey也是调用CryptAcquireContext的,只不过后者需要自己去找容器名,前者帮你从证书的Context属性中取出私钥容器名。
    你要确定这张证书的私钥是签名用的还是加密用的,加密应该用AT_EXCHANGE。
      

  9.   

    能不能解释一下AT_EXCHANGE&AT_SIGNATURE,我从P12得到PCCERT_CONTEXT,通过CryptAcquireCertificatePrivateKey获得CSP句柄,照例说应该可以用AT_SIGNATURE获得hKey。可是每次都返回错误,不知道怎么实现使用现有P12签名(非CryptSignMessage)
      

  10.   

    再次提问:手头有P12格式文件,如何使用私钥签名(非CryptSignMessage)?最好有源码
      

  11.   

    怎么没人回答.我想再问个简单问题:我有P12文件,如何使用CryptVerifySignature验证?最好告诉步骤,谢谢