У нас есть приложение, которое шифрует/дешифрует данные как DataProtectionScope.LocalMachine
. Теперь нам нужно изменить область действия на DataProtectionScope.CurrentUser
.
Будут ли существующие строки, зашифрованные в области LocalMachine
, по-прежнему доступны для чтения, когда область будет изменена на CurrentUser
, если, конечно, пользователь вошел в систему на том же компьютере?
РЕДАКТИРОВАТЬ: я написал очень быстрое и грязное тестовое приложение. Как ни странно, на одном компьютере я могу расшифровать строку, зашифрованную в области LocalMachine или CurrentUser, как в области LocalMachine, так и в области CurrentUser. Это не похоже на правильное поведение, помогите!
private void btnUserEncrypt_Click(object sender, EventArgs e)
{
//encrypt data
var data = Encoding.Unicode.GetBytes(txtUserEncrypt.Text);
byte[] encrypted = ProtectedData.Protect(data, null, DataProtectionScope.CurrentUser);
txtUserEncrypt.Text = Convert.ToBase64String(encrypted);
}
private void btnUserDecrypt_Click(object sender, EventArgs e)
{
byte[] data = Convert.FromBase64String(txtUserDecrypt.Text);
//decrypt data
byte[] decrypted = ProtectedData.Unprotect(data, null, DataProtectionScope.CurrentUser);
txtUserDecrypt.Text = Encoding.Unicode.GetString(decrypted);
}
private void btnMachineEncrypt_Click(object sender, EventArgs e)
{
//encrypt data
var data = Encoding.Unicode.GetBytes(txtMachineEncrypt.Text);
byte[] encrypted = ProtectedData.Protect(data, null, DataProtectionScope.LocalMachine);
txtMachineEncrypt.Text = Convert.ToBase64String(encrypted);
}
private void btnMachineDecrypt_Click(object sender, EventArgs e)
{
byte[] data = Convert.FromBase64String(txtMachineDecrypt.Text);
//decrypt data
byte[] decrypted = ProtectedData.Unprotect(data, null, DataProtectionScope.LocalMachine);
txtMachineDecrypt.Text = Encoding.Unicode.GetString(decrypted);
}