私は新しいWindows8開発者です。Linux用に設計されたコードがいくつかありますが、GTK#がインストールされている限りWindowsでも実行されます。
私は現在、そのアプリケーションをモダンUI(Metro)アプリとしてWindows8に移植しています。キー派生コード(ユーザーのパスワードを取得し、そこからキー256ビットキーを取得する)をインポートしようとすると、Visual Studio Ultimate 2013が認識しないことを示すことを除いて、問題はありませんusing System.Security.Cryptography
。
Windows 8開発者のWebサイトを調べたところ、新しいクラスWindows.Security.Cryptography
が利用可能であることがわかりましたが、VisualStudioでも認識されていないようです。
それで、あなたが背景を持っているので、私はいくつかの質問があります:
- System.Security.CryptographyはWindows8で利用できますか?もしそうなら、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;
}
}