首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CAPICOM与P/Invoke

CAPICOM与P/Invoke
EN

Stack Overflow用户
提问于 2011-07-28 14:14:17
回答 3查看 2.4K关注 0票数 3

我希望在CryptoAPI中使用C#访问证书存储和签名消息。

这篇MSDN文章"CAPICOM: CryptoAPI变得容易“展示了两种方法:使用CAPICOM或P/Invoke。

  1. 哪一个是最好的?CAPICOM.dll或P/Invoke [DllImport("crypt32.dll", ...)]
  2. "crypt32.dll“会出现在任何机器上吗?
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-07-28 14:30:02

CAPICOM是微软( Microsoft )已经/正在反对的一项古老技术。P/Invoke (平台调用)允许托管代码调用在DLL中实现的非托管代码。

它是一个基于COM的CryptoAPI库包装器.你贴的那篇文章是2003年写的。那是8年前的事了,技术已经向前发展了。

本文在MSDN这里为建议您使用.NET框架提供安全特性,以代替CAPICOM。

票数 4
EN

Stack Overflow用户

发布于 2011-07-28 14:29:46

密码32的有效性不应该反对一个问题,而卡皮科姆应该反对。

不过,在同样的注意事项上,您应该确保.Net中没有托管包装器,然后再转到p\invoke

票数 1
EN

Stack Overflow用户

发布于 2011-07-28 14:42:37

使用CAPICOM是一项要求吗?它将工作,但有一些非常恼人的缺点,如果您不使用/拥有/使用它,您将更好地使用System.Security.Cryptography。

无论如何:要使用CAPICOM,必须首先在项目中添加对它的引用。然后:

代码语言:javascript
复制
    CAPICOM.SignedData signeddata = new CAPICOM.SignedData();
    FileStream file = File.Open(tbSourceFile.Text, FileMode.Open);
    byte[] Content = new byte[(int)file.Length];

    file.Read(Content, 0, (int)file.Length);
    file.Close();

    StringWriter sw = new StringWriter();
    sw.Write(Content);

    signeddata.Content = sw.ToString();

    IStore store = new CAPICOM.Store();
    store.Open(CAPICOM.CAPICOM_STORE_LOCATION.CAPICOM_CURRENT_USER_STORE, "MY", CAPICOM.CAPICOM_STORE_OPEN_MODE.CAPICOM_STORE_OPEN_READ_ONLY | CAPICOM.CAPICOM_STORE_OPEN_MODE.CAPICOM_STORE_OPEN_EXISTING_ONLY);
    ICertificates2 certificates = (ICertificates2)store.Certificates;

    certificates = certificates.Find(CAPICOM_CERTIFICATE_FIND_TYPE.CAPICOM_CERTIFICATE_FIND_KEY_USAGE, CAPICOM_KEY_USAGE.CAPICOM_DIGITAL_SIGNATURE_KEY_USAGE, true);

    if (certificates.Count > 0)
    {
        certificates = certificates.Select();
    }
    if (certificates.Count > 0)
    {
        ISigner2 signers = new CAPICOM.Signer();
        signers.Certificate = certificates[1];
        tbSignatureBlock.Text = signeddata.Sign(signers, true);
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6860402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档