这是对Mono xbuild error CS1548 - key file has incorrect format
的跟进嗨,我有一个使用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密钥值。
答案 0 :(得分: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);
}
}
}
}
答案 1 :(得分:2)
sn -p
用于从强名称中提取public key。
但是,您需要使用私钥才能对程序集进行签名 - 因此(内置sn
)转换对您的目标没有帮助。
遗憾的是,快速查看Microsoft sn
选项并未记录任何选项,无法执行您正在寻找的内容。
我的建议是编写一个小工具,重新使用Mono sn
和Mono.Security.dll
源代码来读取PFX(pkcs#12)文件并将其作为SNK文件写回。 / p>
答案 2 :(得分:-1)
请尝试sn -p key.pfx key.snk
。