猿问

仅从公钥创建 RSACryptoServiceProvider

我正在使用密钥对来签署我的 XML(使用 SignedXml)并且我将公钥作为嵌入式资源嵌入到我的应用程序中。


在这里我如何创建密钥对


sn -k Warehouse.snk

sn -p Warehouse.snk WarehousePublic.snk

当我试图阅读WarehousePublic.snk我得到一个异常错误版本的提供者。


这是我的代码:


using (Stream stream = assembly.GetManifestResourceStream("WareApp.Resources.WarehousePublic.snk"))

{

    byte[] bytes = new byte[stream.Length];

    stream.Read(bytes, 0, bytes.Length);


    using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())

    {

        rsa.ImportCspBlob(bytes);  //the exception occurred here


        ...

        ...

        ...

    }

}

有没有办法仅从公钥创建RSACryptoServiceProvider?


我也试过使用 X509Certificate2


X509Certificate2 cert = new X509Certificate2(bytes);  //I got exception here

RSACryptoServiceProvider rsa = (RSACryptoServiceProvider)cert2.PublicKey.Key;

但我得到异常无法找到请求的对象。


任何的想法?


明月笑刀无情
浏览 227回答 2
2回答

慕标琳琳

我认为SN用于生成签名证书(RSACryptoServiceProvider至少使用)是不受支持的。我想这可以解释错误。在 Windows 中,您要查找的是.PFX文件(即带密钥的证书)和.CER文件(不带私钥的证书)。SN(MSDN 链接)不提供安全性,仅用于标识。您可以使用 IIS 或makecert.exe生成一个自签名证书,该证书应该与您尝试执行的操作(.PFX即已导入 Windows 证书存储的文件和/或证书)配合使用。然后,您可以从中提取.CER文件并将其用于您的项目。
随时随地看视频慕课网APP
我要回答