Я пытаюсь написать простое C# консольное приложение, которое сохранит мои chrome пароли. Я знаю, что мои данные для входа хранятся в C:\Users\USER\Appdata\Local\Google\Chrome\User Data\Default\Login Data
, и пароли зашифрованы, но могут быть расшифрованы, если текущий пользователь запускает программу.
Когда я пытаюсь расшифровать пароли с помощью Unprotect () метод, я получаю следующую ошибку:
System.Security.Cryptography.CryptographicException: The parameter is incorrect
Вот мой код:
public void decrypt()
{
//Create a temp file to read from so database isn't locked
string source = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + @"\Google\Chrome\User Data\Default\Login Data";
string target = @"tmp\backup";
File.Copy(source, target);
SQLiteConnection sqlite = new SQLiteConnection(@"Data Source="+ target);
try
{
sqlite.Open();
SQLiteCommand cmd = sqlite.CreateCommand();
cmd.CommandText = "SELECT action_url, username_value, password_value FROM logins";
SQLiteDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
//Decrypt password. Problem arises here
var plainText = Encoding.UTF8.GetString(ProtectedData.Unprotect((byte[])reader["password_value"], null, DataProtectionScope.CurrentUser));
}
reader.Close();
sqlite.Close();
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
}
База данных, кажется, действительна, потому что я могу получить имя пользователя, имена хостов..et c, но я просто не могу расшифровать свои пароли в обычный текст. Я вошел как текущий пользователь.