私はエッジケースを持っています。商用のクローズド ソース ツールによって生成されたバイナリ データファイルを読み取るコードを作成しています。データ形式に関する情報はドキュメントで指定されています。
データ整合性チェックの場合、ベンダーの仕様では、RFC2898 に従ってパスワードから派生したキーを使用して、SHA1 に基づくHMACを要求しています。多くのプログラミング環境には、これらのハッシュを生成する HMACSHA1 というクラスがあります。
ゼロ以外の長さのデータ ストリームの場合、ハッシュを正常に計算でき、コード内の計算はベンダーの実装と一致します。つまり、私のコードは、ベンダーが作成したファイルを読み取って認証でき、その逆も可能です。
ただし、データ ストリームの長さがゼロの場合、ベンダーのツールは、すべてがゼロではないハッシュを発行します。HMACSHA1 を実行するメッセージがない場合、どこから来たのかわかりません。
HMACSHA1 の場合、または任意の HMAC の場合、MAC は「ヌル メッセージ」のエッジ ケースに対して定義されていますか?
私の質問はプラットフォームに依存しないと思いますが、 私は.NETとクラスSystem.Security.Cryptography.HMACSHA1を使用しています。
プラットフォーム固有のビットが 1 つあります。そのタイプのインスタンスで Hash プロパティを取得しようとすると、インスタンスを介してデータを実行していない場合、取得されます。
Exception: System.NullReferenceException: Object reference not set to an instance of an object.
at System.Security.Cryptography.HashAlgorithm.get_Hash()
ハッシュするものがないので、これはまったく驚くべきことではありません。
ヒントはありますか?