2012-02-13 5 views
5

के लिए SNK रूपांतरण के लिए यह, मैं एक आवेदन है कि सी # में लिखा है VS2008 का उपयोग कर Mono xbuild error CS1548 - key file has incorrect formatPFX/PKCS12 मोनो

हाय पर नजर है। वर्तमान में हम मोनो का उपयोग कर इस ऐप को मैक पर पोर्ट कर रहे हैं।

मैंने पीएफएक्स फ़ाइल से कुंजी निकालने का प्रयास किया है। सबसे पहले मैं

`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 कुंजी मैं इसमें दोनों निजी और सार्वजनिक कुंजी हो सकता है बनाने के है। यह सिर्फ विरासत के मुद्दों के कारण हम वास्तव में मूल पीएफएक्स कुंजी मानों का उपयोग करने में सक्षम होना चाहते हैं।

उत्तर

6

उत्तर के साथ आने के लिए बड़े धन्यवाद Poupou मैंने अपने स्नैक प्राप्त करने के लिए किए गए छोटे कार्यक्रम में कोड जोड़ा है।

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); 
      } 
     } 
    } 
} 
0

इसके बजाय sn -p key.pfx key.snk आज़माएं।

+1

प्रश्न से यह दूसरी चीज के समान दिखता है। – poupou

2

sn -p का उपयोग एक मजबूत नाम से public key निकालने के लिए किया जाता है।

हालांकि असेंबली पर हस्ताक्षर करने के लिए आपको निजी कुंजी की आवश्यकता है - इसलिए यह (sn) रूपांतरण आपके लक्ष्य के लिए सहायक नहीं है।

अफसोस की बात है कि माइक्रोसॉफ्ट sn विकल्प पर एक त्वरित नज़र डालने के लिए आप जो भी खोज रहे हैं उसे करने का कोई विकल्प नहीं है।

मेरा सुझाव है कि पीएफएक्स (पीकेसीएस # 12) फ़ाइल पढ़ने के लिए मोनो sn और Mono.Security.dll स्रोत कोड का उपयोग करके एक छोटा सा टूल लिखना और उसे एसएनके फ़ाइल के रूप में वापस लिखना है।

+0

धन्यवाद poupou मैं असेंबली पर हस्ताक्षर करने के साथ एक शुरुआत करने वाला हूं। मैं समझता हूं कि उपकरण को क्या करना चाहिए, यह नहीं पता कि इसे कैसे शुरू करना है। तो क्या मैं pfx में पढ़ने के लिए mono.security का उपयोग कर सकता हूं और फिर निजी और सार्वजनिक कुंजी प्राप्त कर सकता हूं और फिर मोनो स्न और पुनर्प्राप्त कुंजी के साथ नई स्नैक फ़ाइल बना सकता हूं। मेरे पास पीएफएक्स फ़ाइल का पासवर्ड है। किसी भी सुझाव के लिए अग्रिम धन्यवाद मैं वास्तव में इसकी सराहना करता हूं। –

+0

हमारी पीएफएक्स फ़ाइल पर एक पासवर्ड है जो हमें लगता है कि इस लिंक में मोनो को चाबियाँ पढ़ने से रोकेंगी https://bugzilla.xamarin.com/show_bug.cgi?id=725। हम यह भी नहीं जानते कि एक सटीक निजी और सार्वजनिक कुंजी के साथ एक स्नैक फ़ाइल कैसे लिखना है - ऐसा लगता है कि यह नई यादृच्छिक कुंजी उत्पन्न करता है। –

+0

वर्ग 'X509Certificate2' पीएफएक्स (पीकेसीएस # 12) पासवर्ड संरक्षित फ़ाइल पढ़ सकता है। इसमें एक 'निजीकी' संपत्ति भी है जो 'आरएसए' उदाहरण का पर्दाफाश करेगी। इसके साथ आप इसे 'स्ट्रॉन्गनाम' वर्ग (Mono.Security.dll से) का उपयोग कर सकते हैं ताकि इसे वापस (पासवर्ड-कम) '.snk' फ़ाइल के रूप में सहेज सकें। – poupou