Sono un nuovo sviluppatore di Windows 8, ho un codice che è stato progettato per Linux, ma anche eseguito su Windows fino a quando GTK # è stato installato.System.Security.Cryptography vs. Windows.Security.Cryptography
Attualmente sto eseguendo il porting di quell'applicazione su Windows 8 come app Modern UI (Metro). Sta andando bene, tranne quando cerco di importare il mio codice di derivazione della chiave (che prende la password dell'utente e ne ricava una chiave da 256 bit), Visual Studio Ultimate 2013 indica che non riconosce using System.Security.Cryptography
.
Dopo aver esaminato il sito Web degli sviluppatori di Windows 8, ho scoperto che una nuova classe, Windows.Security.Cryptography
è disponibile, tuttavia, non sembra essere riconosciuta da Visual Studio.
Così, ora che avete il fondo, ho alcune domande:
- E` System.Security.Cryptography disponibili in Windows 8? In tal caso, è supportata la versione RT? Come posso far sì che Visual Studio lo riconosca?
- In che modo Windows.System.Security è diverso e esiste un metodo/classe compatibile per Rfc2898DeriveBytes? Per compatibilità, voglio dire data la stessa password e sale c'è un modo per ottenere la stessa chiave di conseguenza.
Per chiarimenti circa quello che voglio fare, il mio codice di derivazione della chiave è allocata sotto:
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' sembra solo per contenere tre classi o giù di lì, non quello che stai dopo suppongo. Non vedo alcun motivo per cui 'System.Security.Cryptography' non dovrebbe essere parte di Windows 8. È nel framework .NET, quindi perché non dovrebbe essere? Penso che tu stia soffrendo di un problema di riferimento mancante. –
I riferimenti devono essere aggiunti manualmente per alcune classi? – Razick
sì, sarà necessario aggiungere il riferimento a System.Security e quindi System.Security.Cryptography verrà risolto ma per le app desktop di Windows 8 non solo Windows Store (nee Metro). –