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倍の時間になります。