2012-10-08 53 views
12

我是一位新的Windows 8開發人員,我有一些代碼是爲Linux設計的,但也可以在Windows上運行,只要安裝GTK#。System.Security.Cryptography vs. Windows.Security.Cryptography

我目前正在將該應用程序作爲現代UI(Metro)應用程序移植到Windows 8。除了當我嘗試導入我的密鑰派生代碼(它接受用戶密碼並從中導出密鑰256位密鑰)時,Visual Studio Ultimate 2013表明它不識別using System.Security.Cryptography

在查看Windows 8開發人員網站後,我發現有一個新類Windows.Security.Cryptography可用,但它似乎並未被Visual Studio識別。

所以,現在你有後臺,我有幾個問題:

  1. 是System.Security.Cryptography可在Windows 8?如果是這樣,是否支持RT版本?我如何讓Visual Studio識別它?
  2. Windows.System.Security是如何不同的,並且是否存在與Rfc2898DeriveBytes兼容的類/方法?通過兼容,我的意思是給予相同的密碼和鹽是否有辦法獲得相同的密鑰作爲結果。

爲了澄清什麼,我想做的事,我的密鑰導出的代碼下面貼:

public class GetKey 
{ 
    // constructor 
    public GetKey (bool use=true, string password="none") 
    { if (use == true) 
     { 
      this.genSalt(); 
      byte[] salt = this.salt; 
      Rfc2898DeriveBytes pwdKey = new Rfc2898DeriveBytes(password, salt, 4000); 
      this.key = pwdKey.GetBytes(32); 
      this.iv = pwdKey.GetBytes(16); 
     } 
    } 

    // properties 
    private byte[] key; 
    private byte[] iv; 
    private byte[] salt; 

    // methods 
    public void retrieveKey(string password) 
    { 
     try 
     { 
      byte[] salt = this.salt; 
      Rfc2898DeriveBytes pwdKey = new Rfc2898DeriveBytes(password, salt, 4000); 
      this.key = pwdKey.GetBytes(32); 
      this.iv = pwdKey.GetBytes(16); 
     } 
     catch (Exception e) 
     { 
      GenericDialog win = new GenericDialog("Unknown Error: " + e.Message, "Error Notice", "Unknown Error"); 
      win.Show(); 
     } 
    } 

    public void genSalt() 
    { 
     string sSalt = UtilityClass.randString(16); 
     byte[] salt = UtilityClass.ToByteArray(sSalt); 
     this.salt = salt; 
    } 

    public byte[] returnKey() 
    { 
     return this.key; 
    } 

    public byte[] returnIv() 
    { 
     return this.iv; 
    } 

    public byte[] returnSalt() 
    { 
     return this.salt; 
    } 
    public bool setSalt(string salt) 
    { 
     try 
     { 
      this.salt = Convert.FromBase64String(salt); 
     } 
     catch 
     { 
      GenericDialog win = new GenericDialog("Decryption failed because the salt was invalid.", "Error Notice", "Invalid Salt"); 
      win.Show(); 
      return false; 
     } 
     return true; 
    } 
} 
+0

'Windows.Security.Cryptography'似乎只包含三個班左右,而不是你在做什麼,我想以後。我看不出爲什麼'System.Security.Cryptography'不應該成爲Windows 8的一部分。它在.NET框架中,所以爲什麼不呢?我認爲你正在遭受缺失的參考問題。 –

+0

是否需要爲某些類手動添加引用? – Razick

+1

是的,您需要添加對System.Security的引用,然後System.Security.Cryptography才能解析,但對於Windows 8桌面應用程序而言,不是Windows Store(nee Metro)。 –

回答

11

1)System.Security.Cryptography在Windows應用商店應用中不可用,所以您將不得不使用Windows.Security.Cryptography。請參閱下面的鏈接,以獲取有關使用.NET便攜式庫重用類庫的不同目標框架的很好說明。如果需要,您可以隨時使用您最喜愛的IoC容器注入抽象。

http://www.hanselman.com/blog/HiddenGemsInVisualStudio11BetaNETPortableClassLibraries.aspx

2)我沒有看到Rfc2898DeriveBytes的Windows.Security.Cryptography實現或類似的東西。見下文。

http://msdn.microsoft.com/en-us/library/windows/apps/windows.security.cryptography.core.symmetricalgorithmnames.aspx

相關問題