2011-09-26 20 views
5

Parola korumalı anahtar sözcüğünü (pfx) kullanarak bir derlemeyi programlı olarak imzalamaya çalışıyorum. Ancak StrongNameKeyPair kullanmaya çalıştığınızda, aşağıdaki özel durum alırım.StrongNameKeyPair parola korumalı anahtar (pfx) ile nasıl kullanılır?

StrongNameKeyPair için genel anahtar alınamadı. System.Reflection.StrongNameKeyPair.get_PublicKey() at System.Reflection.StrongNameKeyPair.ComputePublicKey() de

+0

Bize bu hatayı almak için kullandığınız kodu göstermeniz bize yardımcı olacaktır (ve siz). – poupou

cevap

1

Microsoft snk dosya biçimi dışında başka bir şey desteklemek için StrongNameKeyPair güncellenen gibi gözükmüyor - orada olduğu gibi ne yazık ki, RSA örneğini kabul eden kurucu yok. Aslında, benim anlayışım, strongnaming düzenekleri için PKCS # 12 support'un dolaylı bir yoldur, yani araçlar (msbuild veya VS.NET) tarafından sağlanan ve doğrudan çerçeve tarafından değil. Yine de, herhangi bir RSA örneğini kullanarak, github'ta bulunan Mono.Security StrongName sınıfından (MIT.X11 lisanslı) kodu yeniden kullanarak bir derlemeyi program aracılığıyla imzalayabilirsiniz. Bu biraz daha fazla iş var - ama herhangi bir çerçeve sürümünde çalışacak ve herhangi bir (gelecekteki) formatta çalışacak. :-)

+0

StrongNameKeyPair, bir bayt [] girişi olan bir kurucuya sahiptir. Bunu bir PFX'den kurmak için yeterli olduğuna inanıyorum (cevabıma bakın). –

3

Burada bir şifre korumalı .PFX dosyasından StrongNameKeyPair nesnesi oluşturan C# kodunun bir parçası :

public static StrongNameKeyPair GetStrongNameKeyPairFromPfx(string pfxFile, string password) 
    { 
     X509Certificate2Collection certs = new X509Certificate2Collection(); 
     certs.Import(pfxFile, password, X509KeyStorageFlags.Exportable); 
     if (certs.Count == 0) 
      throw new ArgumentException(null, "pfxFile"); 

     RSACryptoServiceProvider provider = certs[0].PrivateKey as RSACryptoServiceProvider; 
     if (provider == null) // not a good pfx file 
      throw new ArgumentException(null, "pfxFile"); 

     return new StrongNameKeyPair(provider.ExportCspBlob(false)); 
    } 

NOT: Ben bir montaj güçlü bir isim oluşturulmasını desteklemek için buraya (örneğin Visual Studio güçlü isim UI formu) .NET Framework araçları tarafından oluşturuldu PFX'i varsayalım. Herhangi bir PFX ile tamam olmayabilir.

+0

X509Certificate2Collection gerekli olmasına rağmen (sadece X509Certificate2 kullanın) bu bulduğum en iyi çözüm. – Rafael

+0

@Rafael - Kesinlikle. Bunu cevapladıktan sonra gördüm :-) –

İlgili konular