2014-02-10 85 views
0

我正在用c#中的自簽名X509Certificate簽署一些數據。簽名結果爲二進制byte[]。我想將此簽名保存爲pkcs#7格式文件,其擴展名爲.p7b。當我根據需要使用FileStream保存該文件時。它會生成一個無效的p7b文件。x509Certificate - 以pkcs#7格式保存二進制簽名(.net c#)

任何人都可以將此簽名保存爲有效的外部文件嗎?或者指出該方法是否有問題?

//編輯:添加代碼詢問由Eugene Mayevski

// Open Store Location & fetch certificate 
X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser); 
store.Open(OpenFlags.ReadWrite); 
X509Certificate2Collection certifcates = store.Certificates; 
X509Certificate2 certificate = certifcates[0];` 

// fetch private key 
string publicKeyString = certificate.GetPublicKeyString(); 
RSACryptoServiceProvider privateKey = certificate.PrivateKey as RSACryptoServiceProvider; 

// get binary of data & sign it. 
byte[] buffer = Encoding.Default.GetBytes("Sample data to sign. Although it would be a document."); 
byte[] signature = privateKey.SignData(buffer, new SHA1Managed()); 
+0

你看看http://msdn.microsoft.com/en-us/library/ms180948%28v=vs.85%29.aspx? 你不想存儲證書,但簽名,對吧? – BatteryBackupUnit

+0

是的,我需要自己存儲簽名。我已經瀏覽了您提供的鏈接。我認爲這些功能封裝在.net 4.0中,因爲命名空間System.Security.Cryptography.pkcs不可用。無論如何,數據正在簽署和驗證。唯一我想要的是將Signature以適當的文件格式存儲。 – Ram

+0

很高興看到您首先使用的代碼創建簽名。這可能是因爲您實際上沒有創建PKCS#7簽名,因此存在問題。 –

回答

0

您還沒有生成,其在PKCS#7中定義的加密消息語法(CMS)的消息格式。您只生成簽名,該簽名可以放在容器格式中。

要自己創建CMS格式的消息,請查看Microsoft documentation或使用C# version of Bouncy Castle

+0

感謝您澄清。在深入研究密碼學之後,我可以消化這些東西(正如我剛纔所說的那樣)。在文檔鏈接中指出的API也有點令人困惑,因爲它顯示.net版本高達3.0,並且這些類在添加安全dll之前不可訪問。因此感覺它已經過時了。 @BatteryBackupUnit由於這個原因,我沒有理解你的評論。 – Ram