2016-05-19 4 views
3

SHA-2が2つの異なる方法で実行されているのを見ているようです。SHA256Managed()対SHA256Managed.Create()

はい、私は1が「NEWで処理」されていることを取得する(インスタンス化)対A他のメソッドを作成しますが、それは「SHA2」同様に動作してい同じ同じオブジェクト

HashAlgorithm sha2 = new SHA256Managed(); 

vs.    

SHA256 sha2 = SHA256Managed.Create(); 

を達成しているようですか?違いは何で、なぜ2つのタイプが書かれているのですか?

+0

よく 'Create'は' SHA256'オブジェクトを返し、 'SHA256Managed'を返しません。 – DavidG

+1

[参照元](http://referencesource.microsoft.com/#mscorlib/system/security/cryptography/sha256.cs,b87ea7e64312d482)を見ると、彼らは同じになるだろうと思います。もしあなたがその道をたどると、 'Create 'はデフォルトで新しい' Sha256Managed'インスタンスを返すように見えます。 – Blorgbeard

+0

@DavidG 'SHA256'は抽象クラスなので、実際のインスタンスはサブクラスでなければなりません。 – Blorgbeard

答えて

2

.Createメソッドを使用すると、プラットフォームの最適化されたバージョンの実装が提供される可能性があります(Microsoftの現在のコードは、すべての可能性のある場所でその機会を使用しない可能性があります)。

たとえば、ハードウェア暗号化をサポートしているマシンでこの呼び出しを行うと、ハードウェア固有のバージョンが返されることがあります。

したがって、独自のコードで特定の実装を使用しないようにすることをお勧めします。

関連する問題