C#中调用API真的好麻烦:(GZ!

解决方案 »

  1.   

    由于没有使过这个API,最好把
    HCERTSTORE:什么类型?
    CRYPT_DATA_BLOB:应该是个结构类型吧,需要layout
    LPCWSTR szPassword:不能直接用string来进行传递
    void *pvReserved:你调用的时候,还想没传这个参数
    DWORD dwFlags:应该是标志,有些具体的值吧
    你先看看
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/security/security/pfxexportcertstoreex.asp的说明吧
      

  2.   

    你说的对,现在我已经明白一些api的东西了,msdn的说明我也看了无数遍了,可惜这个PFXExportCertStoreEx坏东西太难用了,十分不懂,百分迷惑,千分糊涂,万分困扰。
    希望对api比较懂的大哥哥们帮帮小妹试试这个函数吧。哪怕给我一段没经过测试的代码也好让小妹葫芦画瓢阿。。谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢
      

  3.   

    不会,不过这个flag也就只有3个值。
    EXPORT_PRIVATE_KEYS Private keys are exported as well as the certificates. REPORT_NO_PRIVATE_KEY If a certificate is encountered that has no associated private key, the function returns FALSE with the last error set to either CRYPT_E_NOT_FOUND or NTE_NO_KEY. REPORT_NOT_ABLE_TO_EXPORT_PRIVATE_KEY If a certificate is encountered that has a non-exportable private key, the function returns FALSE with the last error set to either CRYPT_E_NOT_FOUND or NTE_BAD_KEY. 
      

  4.   

    试试看:
    IntPtr hnd; 
    ...
    Cryptography.X509Certificates.X509Certificate cert= Cryptography.X509Certificates.X509Certificate(hnd);
    byte[] Data=cert.GetRawCertData();  //得到证书的原始数据typedef struct _CRYPTOAPI_BLOB 
    {  
       DWORD cbData;
       BYTE* pbData;
    }cryB;
    cryB->cbData=Data.Length;
    cryB->pbData=Data;PFXExportCertStoreEx(store.Handle,cryB,"liuying",null,EXPORT_PRIVATE_KEYS|REPORT_NO_PRIVATE_KEY);
      

  5.   

    PFXExportCertStoreEx(store.Handle,cryB,"liuying",null,EXPORT_PRIVATE_KEYS|REPORT_NO_PRIVATE_KEY);这个不行啊,
      

  6.   

    呵呵,我的VC 删了,你找个有VC 的家伙,找出 Wincrypt.h 就冰释了你是不是想要数字签名?
    可以参考:http://www.ithome-cn.net/technology/vc/vc141.htm信任证书不是你自己可以颁发的,就算是windows 中的administrator 身份证书也只是身份证书并不是一个信任证书晕
      

  7.   

    我用makecert 做一个根证书不就可以了吗?
      

  8.   

    自签名的证书,用法只有一个,受最终用户所信任,如果是microsoft.com 那么最终用户能够明确的知道一件事,此证书是微软的,并且在该包中有效,有效就代表着包的CRC 都正常没有被改动过。但是,如果是你自己颁发给自己,用户会信任吗?它和有没有证书并没有区别,用户都只能根据此包的来源来确定是否应该点击是,换个角度,如果你使用的是国际上受信任的颁发机构发给你的证书,那么最终用户见到的将是颁发机构的证书,因为此机构受正当信任,他只要考虑是否此证书现在是否还有效。比如,3721.com 的证书是他们自己create 的,你会信任他吗?取决于证书自己吗?如果3721 弹出来的证书是微软的那就另当别论了,呵呵而数字签名则不同,它可以是双方的一个约定,以保证双方的数据原封不动,它是可以由用户自己生成。你的问题你可以查阅一下Wincrypt.h 里面有你要的声明和原型
      

  9.   

    你不要忘了,有了证书并不代表用户信任你
    正因它人人都可以自己创建,所以它并不能保证包内的内容是否有害。如果它没有存在信任,那么它只一个作用就是保证自己的完整性,不知你的:我其时就是想要做一个带秘钥的合法的证书发给用户是什么意思,如果是WEB上的多点某知用户,那么根本没有必要,单点已知用户用签名比这个要更好
      

  10.   

    只能把子证书作好放到系统的证书库中,还要导出
    我想利用api用程序导出证书,存成证书文件