Tôi là một nhà phát triển Windows 8 mới, tôi có một số mã được thiết kế cho Linux nhưng cũng chạy trên Windows miễn là GTK # đã được cài đặt.System.Security.Cryptography so với Windows.Security.Cryptography
Tôi hiện đang chuyển ứng dụng đó sang Windows 8 làm ứng dụng Giao diện người dùng hiện đại (Metro). Nó đang diễn ra tốt, ngoại trừ, khi tôi cố gắng nhập mã dẫn xuất quan trọng của mình (lấy mật khẩu của người dùng và lấy khóa chính 256 bit từ nó), Visual Studio Ultimate 2013 cho biết rằng nó không nhận ra using System.Security.Cryptography
.
Sau khi xem xét trang web dành cho nhà phát triển Windows 8, tôi thấy rằng một lớp mới, Windows.Security.Cryptography
có sẵn, tuy nhiên, dường như nó không được công nhận bởi Visual Studio.
Vì vậy, bây giờ mà bạn có nền, tôi có một vài câu hỏi:
- là System.Security.Cryptography có sẵn trong Windows 8? Nếu vậy, phiên bản RT có được hỗ trợ không? Làm thế nào tôi có thể làm cho Visual Studio nhận ra nó?
- Windows.System.Security khác nhau như thế nào và có lớp/phương thức tương thích với Rfc2898DeriveBytes không? Bằng cách tương thích, tôi có nghĩa là cho cùng một mật khẩu và muối là có một cách để có được cùng một khóa như một kết quả.
Để làm rõ như những gì tôi muốn làm, mã nguồn gốc chính của tôi được đăng dưới đây:
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' dường như chỉ có ba lớp học, hay như vậy, không phải những gì bạn đang sau khi tôi giả sử. Tôi thấy không có lý do tại sao 'System.Security.Cryptography' không phải là một phần của Windows 8. Đó là trong khuôn khổ .NET, vậy tại sao sẽ không được? Tôi nghĩ rằng bạn đang bị một vấn đề tham chiếu còn thiếu. –
Tham chiếu có phải được thêm thủ công cho một số lớp không? – Razick
có, bạn sẽ cần phải thêm tham chiếu đến System.Security và sau đó System.Security.Cryptography sẽ giải quyết nhưng đối với Windows 8 ứng dụng máy tính để bàn không chỉ Windows Store (nee Metro). –