VC ++とPython間のファイルのMD5ハッシュのわずかな違い

2つのコードがあり、どちらも正確に同じファイルのMD5ハッシュを計算しています。 1つはC ++で(から盗まれたhttp://msdn.microsoft.com/en-us/library/windows/desktop/aa382380%28v=vs.85%29.aspx 、ここでコピーペーストするには長すぎます)、もう1つ1つはPythonにあります:

md5 = hashlib.md5()
f = open("file", 'rb')
while True:
    data = f.read(1024)
    if not data:
        break
    md5.update(data)
hash = md5.hexdigest()

一見すると、2つのハッシュは等しいと思われましたが、実際にはそうではありません。

987ab42efb655a62249651907daef16e (Python) - 9874eb5a24610de1e49651907daef16e (C++) 33ee1578f082db63f2f590ca210f419e (Python) - 33e5802b3250a1f1e2f590ca210f419e (C++)

では、これらの違いを引き起こす原因は何でしょうか?

一定:

Duncanのコメントに感謝します。

Okay, I think this is the data the OP is using:

33ee1578f082db63f2f590ca210f419e usr/local/games/cs2d/sfx/items/drop.wav
987ab42efb655a62249651907daef16e  usr/local/games/cs2d/sfx/items/ammo.wav
2
md5sum file コマンドの結果は何ですか?
追加された 著者 kev,
@バナナンはリンクされたページから何らかの方法でC ++コードを変更しましたか?ハッシュの一部は、結果をどのように出力するかという問題に非常に強く関連しています。ハッシュを含むバッファの一部が破損しているため、表示できません。
追加された 著者 Duncan,
ファイルモードに "U"を追加すると何か変更されますか? PythonとC ++のコードは改行を別々に扱っているかもしれません。
追加された 著者 chepner,
@hughdbrown。 OPのためのラッキーファイルは恥ずかしいではありません:)
追加された 著者 Johan Lundberg,
私たちが確認できるサンプルファイルも投稿できますか?そうすれば、2つの方法のどちらが間違っているかを少なくとも知ることができます。
追加された 著者 Niklas B.,
また、MSの例の最初のコメントをチェックしましたか?たぶんそれらのコードはバグです。
追加された 著者 Niklas B.,
@バナナン:ええ、私の気づいたように、そのコメントはナンセンスです。ファイルはローカルハードドライブにありますか?同じマシンから2つのプログラムを実行しますか?それとも、ネットワーク上で何とかこれを共有していますか?これは実際にバイナリ/テキストモードの問題のように聞こえるが、 'rb' を正しく使用する。おそらく、いくつかの抽象化レイヤーがこれを引き起こしているのでしょうか?あるいは、MSのコードが実際には間違っているかもしれません(私はそれをチェックします)。
追加された 著者 Niklas B.,
@hughdbrown:直感、そうだね。
追加された 著者 Niklas B.,
@hughdbrown:ちょうど偶然かもしれない。
追加された 著者 Niklas B.,
どのように誰もがエラーを複製するデータなしでこれを評価することができますか?
追加された 著者 hughdbrown,
@Niklas B .:またはGoogleのMD5ハッシュをGoogleに紹介してください。ああ、どちらも同じページにあります。 code.google.com/p/ubuntugames/source/browse/branches/…
追加された 著者 hughdbrown,
@kevどちらの場合も、結果はPythonによって作成されたハッシュと同じです。つまり、C ++コードが何とか誤動作しているということです。
追加された 著者 Banaan,
@Niklas B. NULLバイトのバッファサイズを増やしても、ハッシュの違いはないようです。
追加された 著者 Banaan,
@ダンカン:正しいです、ページの正確なコピーを使って正しいハッシュを生成します。 printf の代わりに、 sprintf_s を使用してハッシュをchar配列に書き出します。問題を修正した書き直し、私はどこかでタイプミスがあったと思いますか?助けてくれてありがとう(私は今答えを受け入れることはできないが)
追加された 著者 Banaan,
@chepner、すでにバイナリモード rb で開かれています。
追加された 著者 reclosedev,

答えはありません

0