Обе функции делают одно и то же (когда обе используются с одинаковыми параметрами, они генерируют один и тот же ключ шифрования c).
Единственное отличие в их дизайне состоит в том, что Rfc2898DeriveBytes
предлагает гораздо больше алгоритмы для шифрования, тогда как KeyDerivation
предлагает меньше и также является пакетом, который необходимо загрузить. (Существует предварительно установленный только в ASP .NET / ASP. NET Core, если я не ошибаюсь.)
С точки зрения производительности (тесты - мои) в какой-то момент KeyDerivation
был намного быстрее, особенно в вычислениях SHA-1 , но после тестирования в течение 10-15 минут подряд кажется, что они выровнялись, поэтому я не могу сказать, что более эффективно. Что я могу сказать, так это то, что вам понадобится дополнительное назначение для Rfc2898DeriveBytes
, которое вы либо сразу же утилизируете, либо будете использовать повторно в течение всего срока службы вашего приложения, тогда как KeyDerivation
не требует никаких церемоний при его использовании. Это, конечно, достигается ценой его ограниченных алгоритмов.
Если вы постоянно утилизируете и создаете экземпляр нового Rfc2898DeriveBytes
(не используется повторно, что составляет 90% времени из-за невозможности изменить поставляемый пароль), я считаю KeyDerivation
намного, намного быстрее. (Мои тесты показали 50% штраф в скорости.)