Реализация PasswordDeriveBytes в Silverlight - PullRequest
2 голосов
/ 23 ноября 2011

Я пытаюсь прочитать некоторые зашифрованные данные в Silverlight, которые были зашифрованы с использованием устаревшего приложения .NET с использованием PasswordDeriveBytes для генерации ключа.Я знаю, что в настоящее время мы должны использовать Rfc2898DeriveBytes, но существующее приложение развернуто в более чем 2000 местах, и изменение шифрования данных во всех этих местах просто для реализации версии пользовательского интерфейса Silverlight будет неосуществимым.в настоящее время.

Я пытался реализовать свою собственную версию PasswordDeriveBytes.GetBytes(int byteCount), но хотя я могу легко получить первые 20 байтов (используя хэширование SHA1), я не могу понять, как следующий наборбайт рассчитывается (мне нужно сгенерировать 32-байтовый пароль).Согласно тому, что я прочитал, Microsoft использует «расширение» PBKDF1 для вычисления ключа, но я не нашел никакой информации о том, каким может быть это расширение.

Я пробовал переносить код изРеализация PasswordDeriveBytes проекта Mono и кода, который я нашел в нескольких других местах в Интернете, но все они возвращают совершенно другой пароль, чем исходный класс .NET (даже для первых 20 байтов).

Это версия GetBytes(), которая возвращает правильные первые 20 байтов, но я понятия не имею, как рассчитать следующий блок байтов (или любой последующий блок).Это упрощенный код без обработки ошибок, но я думаю, что он ясно показывает, как я генерирую свой первый пока блок.

public byte[] GetBytes(int byteCount)
{
    byte[] result = new byte[byteCount];

    byte[] pwd = Encoding.UTF8.GetBytes(_PassPhrase);
    byte[] salt = Encoding.UTF8.GetBytes(_Salt);

    byte[] pwdAndSalt = new byte[pwd.Length + salt.Length];
    pwd.CopyTo(pwdAndSalt, 0);
    salt.CopyTo(pwdAndSalt, pwd.Length);

    byte[] hash = _Sha1.ComputeHash(pwdAndSalt);
    for (int i = 1; i < _Iterations; i++)
    {
        hash = _Sha1.ComputeHash(hash);
    }

    hash.CopyTo(result, 0);

    return result;
}

У любого есть идея, как правильно реализовать PasswordDeriveBytes в Silverlight, чтобы генерировать идентичные ключи какобычная версия .NET?Буду очень признателен.

Спасибо

...