2011-01-21 16 views
2

コミュニティに新しく追加されましたが、プログラミングに新しいものはありません。SHA-1、RFC3174、およびRFC4634

私は、実行中のハッシュ関数のコレクションを取得しようとしていましたが、成功しました。しかし、私はいくつかの奇妙な結果を発見し、まだそれに私の指を置くことができませんでした。 RFC4634には、SHA-1およびSHA-2ファミリ用のC実装が含まれています。これは、ハッシュのために渡されるファイルも受け入れることができます。 RFC3174にはC実装が含まれていますが、ファイルストリームは処理されません。私はファイルを検証するためにRFC4634のC実装を使用していますが、SHA-1で提供されているハッシュと比較した場合、検証プロセスは類似していない結果を返しています。

どのような理由が考えられますか?

+0

、あなたは上の暗号アルゴリズムの良いCの実装を見つけることができます[Brian Gladmanのページ](http://gladman.plushost.co.uk/oldsite/cryptography_technology/sha/index.php)あなたがそれらにもっと運がある場合に備えて!それらは、通常、例えば、 OpenSSLの。 – Rup

答えて

2

ASCIIまたはバイナリモードでファイルを開いたかどうかを確認しましたか?行末変換は、ハッシュが計算される前に実行されてもよい。

アップデート:私はちょうどRFC4634 shatestをコンパイルし、サンプルテキストファイルで試してみました

。改行がない限り、すべてのツールが同意します。改行を挿入すると、結果は依存します:テキストファイルがCRとLF(DOSモード)を使用する場合、shatestは別の結果を生成します。行末がLF(UNIX)のみであれば、それは他のツールと引き続き一致します。

アップデート2:

RFC4634のファイルshatest.cで、機能hashfile(...)で、バイナリモードにfopenを設定します。余談として

FILE *hashfp = (strcmp(hashfilename, "-") == 0) ? stdin : 
     fopen(hashfilename, "rb"); 
/*       ^HERE */ 
+0

SHA-1のRFC3174実装とRFC4634の違いは何ですか? – Nocturnal

+0

RFC 4634に準拠していません: "ここで提供されるコードは、任意のビット長の入力文字列をサポートしています。[RFC3174]のSHA-1のサンプルコードも更新されています。 –

+0

RFC3174で提供されている実装には、ファイルをハッシュする機能がありませんでした。だから私はRFC4634の中で提供されているCの実装に慣れていて、ハッシュ出力は与えられたハッシュと一致しませんでした。このコードは、スペースの有無にかかわらずハッシュをサポートしています。 – Nocturnal