PasswordDeriveBytes vs Rfc2898DeriveBytes, Obsoleto, mas muito mais rápido

Estou trabalhando em uma funcionalidade de criptografia baseada em classes herdadas de SymmetricAlgorithm, como TripleDes, DES, etc.

Basicamente, existem duas opções para gerar chave consistente e IV para minha classe de algoritmo,PasswordDeriveBytes eRfc2898DeriveBytes, ambos herdam da classe abstrata DeriveBytes.

oPasswordDeriveBytes.GetBytes() O método é marcado como obsoleto na estrutura .NET, enquanto Rfc2898DeriveBytes.GetBytes () é recomendado, pois ele corresponde ao padrão PBKDF2. No entanto, com base no meu teste, chamando o mesmoGetBytes() método na classe Rfc2898DeriveBytes é quase 15 vezes mais lento do que emPasswordDeriveBytes classe, o que leva ao uso inesperado da CPU (sempre superior a 50%).

Aqui estão alguns dados de teste:

Iterações: 100Tipo de algoritmo: DESTexto Original: "Sou uma chave de teste, me criptografe por favor"Tempo:PasswordDeriveBytes: 99msRfc2898DeriveBytes: 1,373ms

Com base nos testes, o mau desempenho deRfc2898DeriveBytes não é aceitável no ambiente de produção.

Alguém já notou esse problema antes? Qualquer solução eu ainda posso usar um padrão sem atingir o desempenho? Qualquer risco de usar um método obsoleto (pode ser removido na versão futura)?

Obrigado rapazes!

Editar:

Provavelmente eu encontrei onde o problema é ... O número de contagem de iteração padrão paraPasswordDeriveBytes é 100, enquanto paraRfc2898DeriveBytes é 1000. Depois que eu mudei para o mesmo número que 1000, executandoRfc2898DeriveBytes é apenas o dobro do tempo.

questionAnswers(3)

yourAnswerToTheQuestion