.NET: разница между PasswordDeriveBytes и Rfc2898DeriveBytes

Я пытаюсь понять некоторый код C #, который мне передали, который имеет дело с криптографией и конкретно использует PasswordDeriveBytes из System.Security.Cryptography .

В .NET docs говорится, что PasswordDeriveBytes использует «расширение алгоритма PBKDF1», которое позже в указанном документе как «стандарт PKCS # 5 v2.0», то есть PBKDF2 (насколько я могу судить). Везде в сети, которую я нашел (в том числе здесь, на Stack Exchange), все говорят: «используйте Rfc2898DeriveBytes, потому что Password * устарел и использует PBKDF1». Но единственная разница в документах на msdn.microsoft.com , похоже, состоит в том, что в Rfc * -версии специально упоминается PBKDF2, где Password * говорит «расширение PBKDF1» и «PKCS # 5 v 2.0».

Итак, может ли кто-нибудь сказать мне, в чем разница между двумя классами (если они есть) и почему я должен использовать один, а не другой для получения ключа пароля PBKDF2?

Теперь другой код, который имеет дело с тем же data, явно использует PBKDF2 и работает, поэтому можно предположить, что действительно PasswordDeriveBytes также использует PBKDF2 или что PBKDF2 просто совместим с PBKDF1 при определенных обстоятельствах, но я хочу знать наверняка, что это не какая-то сторона эффект какой-то случайной вещи, и эти вещи просто волшебным образом работают (и в конечном итоге, вероятно, волшебным образом и эффектно ломаются), никто не понимает почему.

11
задан Morten Siebuhr 17 August 2011 в 14:55
поделиться