2013-05-02 17 views
2

如何將上傳的文件轉換爲X509Certificate2變量?將FileUpload轉換爲X509Certificate2

我曾嘗試使用下面的代碼嘗試,但它不工作:

public bool hasPublicKey(FileUpload file) 
{ 
    bool check = false; 

    try 
    { 
     X509Certificate2 cert = (X509Certificate2)file.PostedFile.InputStream; 
    } 
    catch(Exception) 
    { 
     check = false; 
    } 
} 
+1

什麼是你上傳?它是證書還是其他類型的文件? – Stefan 2013-05-02 19:49:22

+0

我已經有另一種方法檢查文件的擴展名是否與證書的擴展名一致。現在,我想將上傳的文件轉換爲X509Certificate2數據類型,以便我可以從中獲取公鑰。但是,Visual Studio給我這個錯誤消息:錯誤無法將類型'System.IO.Stream'轉換爲'System.Security.Cryptography.X509Certificates.X509Certificate2' – 2013-05-02 19:51:19

回答

3

如果上傳的文件是一個有效的證書,你應該看看在X509Certificate2類constructorImport方法。

你會看到,你需要這樣的事:

var fileLength = file.PostedFile.ContentLength; 
var certdata = new byte[fileLength]; 

file.FileContent.Read(certData, 0, fileLength); 

var cert = new X509Certificate2(certData); 

(代碼未驗證,但它,或者非常類似的東西,應該工作)。

+1

他已經有'InputStream'。我認爲'cert.Import(file.PostedFile.InputStream)'應該夠了。 – Stefan 2013-05-02 19:55:27

+1

@StefanM:沒有'Import(Stream)'過載。 – 2013-05-02 19:56:52

+1

啊對。我的壞,對不起。 – Stefan 2013-05-02 19:58:48

1
public bool hasPublicKey(FileUpload file) 
    { 
     bool check = false; 

     try 
     { 
      X509Certificate2 cert = new X509Certificate2(file.FileBytes); 

      if (cert.PublicKey != null) 
      { 
       check = true; 
      } 
     } 
     catch(Exception) 
     { 
      check = false; 
     } 
     return check; 
    } 
相關問題