6

这是对Mono xbuild 错误 CS1548 的跟进 - 密钥文件格式不正确

嗨,我有一个使用 VS2008 用 C# 编写的应用程序。目前我们正在使用 Mono 将此应用程序移植到 Mac。

我试图从 pfx 文件中提取密钥。首先我用

`sn -pc key.pfx key.snk`

这给了我一个错误

'Failed to extract public key for key pair -- Keyset does not exist'.

然后我用

`sn -p key.pfx key.snk`

这创建了我想要的 snk 文件。然后我在单声道中选择了项目选项>组装签名当构建错误

'key.snk is missing private key needed for signing'.

我想我明白,如果我制作一个新的 snk 密钥,我可以在其中同时拥有私钥和公钥。只是因为遗留问题,我们真的希望能够使用原始 pfx 键值。

4

3 回答 3

7

非常感谢 Poupou 提出答案我刚刚将代码添加到我为获取我的 snk 而制作的小程序中。

using System.IO;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;

namespace PfxSnk
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            X509Certificate2 cert = new X509Certificate2(@"KEY.pfx", "pfxPassword", X509KeyStorageFlags.Exportable | X509KeyStorageFlags.PersistKeySet);
            RSACryptoServiceProvider provider = (RSACryptoServiceProvider)cert.PrivateKey;

            byte[] array = provider.ExportCspBlob(!provider.PublicOnly);

            using (FileStream fs = new FileStream("FileName.snk", FileMode.Create, FileAccess.Write))
            {
                fs.Write(array, 0, array.Length);
            }
        }
    }
}
于 2012-03-01T19:45:45.380 回答
2

sn -p用于从强名称中提取公钥

但是,您需要私钥才能签署程序集 - 因此这种(内置sn)转换对您的目标没有帮助。

遗憾的是,快速浏览一下 Microsoftsn选项并没有记录任何选项来执行您正在寻找的操作。

我的建议是编写一个小工具,重新使用 MonosnMono.Security.dll源代码,读取 PFX (pkcs#12) 文件并将其作为 SNK 文件写回。

于 2012-02-19T17:05:21.213 回答
-1

试试sn -p key.pfx key.snk吧。

于 2012-02-15T03:10:37.797 回答