我是一位新的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識別。
所以,現在你有後臺,我有幾個問題:
- 是System.Security.Cryptography可在Windows 8?如果是這樣,是否支持RT版本?我如何讓Visual Studio識別它?
- 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;
}
}
'Windows.Security.Cryptography'似乎只包含三個班左右,而不是你在做什麼,我想以後。我看不出爲什麼'System.Security.Cryptography'不應該成爲Windows 8的一部分。它在.NET框架中,所以爲什麼不呢?我認爲你正在遭受缺失的參考問題。 –
是否需要爲某些類手動添加引用? – Razick
是的,您需要添加對System.Security的引用,然後System.Security.Cryptography才能解析,但對於Windows 8桌面應用程序而言,不是Windows Store(nee Metro)。 –