PasswordDeriveBytes vs Rfc2898DeriveBytes, Przestarzałe, ale szybsze

Pracuję nad funkcją szyfrowania opartą na klasach odziedziczonych po SymmetricAlgorithm, takich jak TripleDes, DES itd.

Zasadniczo istnieją dwie opcje generowania spójnego klucza i IV dla mojej klasy algorytmu,PasswordDeriveBytes iRfc2898DeriveBytes, obie dziedziczą po klasie abstrakcyjnej DeriveBytes.

ThePasswordDeriveBytes.GetBytes() metoda jest oznaczona jako przestarzała w środowisku .NET, podczas gdy Rfc2898DeriveBytes.GetBytes () jest zalecany, ponieważ jest zgodny ze standardem PBKDF2. Jednak na podstawie moich testów, dzwoniąc tak samoGetBytes() metoda w klasie Rfc2898DeriveBytes jest prawie 15 razy wolniejsza niż wPasswordDeriveBytes klasa, co prowadzi do nieoczekiwanego użycia procesora (zawsze powyżej 50%).

Oto kilka danych testowych:

Iteracje: 100Typ algorytmu: DESOryginalny tekst: „Jestem kluczem testowym, zaszyfruj mnie”Czas:PasswordDeriveBytes: 99msRfc2898DeriveBytes: 1337 ms

Na podstawie testów zła wydajnośćRfc2898DeriveBytes jest niedopuszczalny w środowisku produkcyjnym.

Czy ktoś wcześniej zauważył ten problem? Jakiekolwiek rozwiązanie, które wciąż mogę użyć standardowego bez uderzenia w wydajność? Jakiekolwiek ryzyko użycia przestarzałej metody (może zostać usunięte w przyszłej wersji)?

Dzięki chłopaki!

Edytować:

Prawdopodobnie znalazłem, gdzie jest problem ... Domyślny numer licznika iteracji dlaPasswordDeriveBytes wynosi 100, podczas gdy dlaRfc2898DeriveBytes wynosi 1000. Po zmianie ich na tę samą liczbę co 1000, wykonywanieRfc2898DeriveBytes jest tylko podwójny.

questionAnswers(3)

yourAnswerToTheQuestion