掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
ハッシュ値の計算について (ID:115986)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
すみません貴重な時間を割いていただいて・・・ >>ができる必要はあるのでしょうか? これに関しては出来ないはずです、ただスレッドの流れから「出来るの!?」と思い書き込みました。 >例えば、データの分割が『1行ごと』でも良いなら >は同じ意味になりますが、どちらでも特に問題は無いでしょう。 >これでは1行ごとのデータの大きさにバラつきがあると非効率的だと思います。 この辺の意味が分かりません、以下は"例えばこんなコード…"と提示されたものと機能は変わりませんが・・・ >******************************************************************************** Private Const BufferSize As Integer = 1024 * 35 Public Function MD5(ByVal FilePath As String) As String Dim fs As System.IO.FileStream Dim Readlen As Integer Dim Buffer(BufferSize - 1) As Byte Dim MD5Crypto As New System.Security.Cryptography.MD5CryptoServiceProvider Try fs = New System.IO.FileStream(FilePath, System.IO.FileMode.Open, System.IO.FileAccess.Read) Catch ex As Exception MsgBox(ex.ToString, MsgBoxStyle.Critical) Application.Exit() End Try While True Application.DoEvents() Readlen = fs.Read(Buffer, 0, Buffer.Length) If Readlen = 0 Then Exit While MD5Crypto.ComputeHash(Buffer, 0, Readlen) Debug.WriteLine(BitConverter.ToString(MD5Crypto.Hash).ToLower().Replace("-", "")) End While End Function >******************************************************************************** SHA/MD5のサンプルを書いて頂いたのですが、それぞれDebug.WriteLineによって書かれたハッシュ値(文字列)らは合計でどの位のデーター量になりますか? //仮にも、35KBで区切り700MBのデーターを比較した場合 //2^20(1MB) * 700(Data) / 35000(Buffer) * 16(Hash[Byte]) = 336KB と書いたように膨大な量になるはずです。そこでバッファサイズ(BlockSize)を仮に2倍にすれば(336/2)KBのデーター量になります。 >バッファを増やせば良いだけの話ですが冗長な事にかわりませんし、 そこで上記の発言がでました。 >336KB の文字列からハッシュ値を求めてもハッシュ値はハッシュ値だと思ってましたが?。 その通りですが、その336KB の文字列から求めたハッシュ値は何のハッシュ値なのかを理解して下さい。 オリジナルデーターのハッシュ値ではなく、336KBの意味のない英数字の並びのハッシュ値です。 >理論を読む限りでは 336KB の文字列から 16Byte のハッシュ値を求めても 十分に機能しそうなんです。 機能します。私はハッシュ関数のコリジョンについては許容範囲として無視しています 336KB の文字列から 16Byte のハッシュ値を求めればそれはオリジナルデータの間接的なハッシュ値として十分使えると考えます。 しかしそこで得られたハッシュ値は何度もいうようにファイルのハッシュ値ではありません。 一般的なハッシュ取得ソフトと互換性はないですよね?
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.