В чем разница между KeyDerivation.Pbkdf2 и Rfc2898DeriveBytes? - PullRequest
1 голос
/ 24 января 2020

KeyDerivation в MSDN:

Выполняет вывод ключа с использованием алгоритма PBKDF2.

Rfc2898DeriveBytes в MSDN:

Реализация на основе пароля Функциональность получения ключей, PBKDF2, с использованием генератора псевдослучайных чисел на основе HMACSHA1.

Разве это не одно и то же? Мы можем установить алгоритм хеширования в обоих методах.

1 Ответ

0 голосов
/ 31 января 2020

Обе функции делают одно и то же (когда обе используются с одинаковыми параметрами, они генерируют один и тот же ключ шифрования c).

Единственное отличие в их дизайне состоит в том, что Rfc2898DeriveBytes предлагает гораздо больше алгоритмы для шифрования, тогда как KeyDerivation предлагает меньше и также является пакетом, который необходимо загрузить. (Существует предварительно установленный только в ASP .NET / ASP. NET Core, если я не ошибаюсь.)

С точки зрения производительности (тесты - мои) в какой-то момент KeyDerivation был намного быстрее, особенно в вычислениях SHA-1 , но после тестирования в течение 10-15 минут подряд кажется, что они выровнялись, поэтому я не могу сказать, что более эффективно. Что я могу сказать, так это то, что вам понадобится дополнительное назначение для Rfc2898DeriveBytes, которое вы либо сразу же утилизируете, либо будете использовать повторно в течение всего срока службы вашего приложения, тогда как KeyDerivation не требует никаких церемоний при его использовании. Это, конечно, достигается ценой его ограниченных алгоритмов.

Если вы постоянно утилизируете и создаете экземпляр нового Rfc2898DeriveBytes (не используется повторно, что составляет 90% времени из-за невозможности изменить поставляемый пароль), я считаю KeyDerivation намного, намного быстрее. (Мои тесты показали 50% штраф в скорости.)

...