TripleDes、DESなどのSymmetricAlgorithmから継承されたクラスに基づく暗号化機能に取り組んでいます。
基本的に、アルゴリズムクラスの一貫したキーとIVを生成するための2つのオプションがPasswordDeriveBytesありRfc2898DeriveBytes、どちらもDeriveBytes抽象クラスから継承します。
このPasswordDeriveBytes.GetBytes()メソッドは、.NET Frameworkで廃止としてマークされていますが、PBKDF2標準に一致するため、Rfc2898DeriveBytes.GetBytes()をお勧めします。ただし、私のテストに基づくと、GetBytes()Rfc2898DeriveBytesクラスで同じメソッドを呼び出すと、クラスのメソッドよりもほぼ15倍遅くなり、PasswordDeriveBytes予期しないCPU使用率(常に50%を超える)が発生します。
ここにいくつかのテストデータがあります:
- 反復:100
- アルゴリズムタイプ:DES
- 元のテキスト:「私はテストキーです。暗号化してください」
- 時間:
- PasswordDeriveBytes:99ms
- Rfc2898DeriveBytes:1,373ms
テストに基づくと、のパフォーマンスの低下はRfc2898DeriveBytes実稼働環境では許容できません。
誰かが以前にこの問題に気づいたことがありますか?パフォーマンスに影響を与えることなく、標準のソリューションを引き続き使用できるソリューションはありますか?廃止された方法を使用するリスクはありますか(将来のバージョンで削除される可能性があります)?
みんなありがとう!
編集:
おそらく問題がどこにあるかを見つけました...のデフォルトの反復回数PasswordDeriveBytesは100ですが、Rfc2898DeriveBytesは1000です。1000と同じ数に変更した後、実行Rfc2898DeriveBytesは2倍の時間になります。