トップページ > 記事閲覧
データハッシュの計算方法
名前:にこよん 日時: 2017/10/08 17:08

お世話になっています。 にこよんです。 散々調べまくったのですが、データハッシュの求め方を理解することができなかったので、ご教授していただけないでしょうか。 私がやりたいことは 先頭アドレスとそのデータのサイズ から一つのハッシュを計算する関数を作ることです。 計算方法はMD5などを利用したいと思っていますが、解読が困難(プロは含まない)であればなんでも構いません。 ライブラリの追加が必要なくて、比較的簡単にできる方法とかもあるのでしょうか?。 目的はファイルハッシュとして使用です。 壊れているファイルを読み込みとプログラムがフリーズしてしまうため、 データが壊れているかの確認を行いたいです。 (データ改造対策もかねて)
メンテ

Page: 1 |

Re: データハッシュの計算方法 ( No.1 )
名前:管理人 日時:2017/10/09 22:51

> 私がやりたいことは 先頭アドレスとそのデータのサイズ から一つのハッシュを計算する関数を作ることです。 先頭アドレスからハッシュを計算…ですか…? 壊れているかどうかの判定のためにファイルにもハッシュ値を保存する必要があるのですが、 ファイルに保存するハッシュ値の計算には『先頭アドレス』として何を使用されるのでしょうか? > 計算方法はMD5などを利用したいと思っていますが、解読が困難(プロは含まない)であればなんでも構いません。 > ライブラリの追加が必要なくて、比較的簡単にできる方法とかもあるのでしょうか?。 MD5 もそこまで難しい処理を必要とはしませんので、こちらのアルゴリズム解説サイトなどを参考に 関数を作成されてみては如何でしょうか? <BK class  MD5の計算方法> http://bkclass.web.fc2.com/doc_md5.html
メンテ
Re: データハッシュの計算方法 ( No.2 )
名前:にこよん 日時:2017/10/11 22:31

> ファイルに保存するハッシュ値の計算には『先頭アドレス』として何を使用されるのでしょうか? 書き方が悪かったです。すみません。 要するにメモリに格納されているデータの指定したサイズ分のデータからハッシュ値を求めたいということです。 先頭アドレスと、そこからのサイズを渡したらその部分に格納されているファイルの情報からハッシュ値を計算し、 返してくれる関数が作りたいという意味です。 前回データを圧縮してファイルに書き込んでくれる関数を作成しましたが、 そこにファイルハッシュを計算して一緒に書き込み、 読み込んだ時にデータが違えばエラーを返してくれる機能を追加したいと考えています。 決まった桁数の数字からなら何とかなりそうなのですが、桁数(メモリに格納されているデータのサイズ数) が分からない場合にどのように計算すればいいのかが分からないです。
メンテ
Re: データハッシュの計算方法 ( No.3 )
名前:管理人 日時:2017/10/12 00:14

> 決まった桁数の数字からなら何とかなりそうなのですが、桁数(メモリに格納されているデータのサイズ数) > が分からない場合にどのように計算すればいいのかが分からないです。 『メモリに格納されているデータの指定したサイズ分のデータからハッシュ値を求める』のでしたら 『メモリに格納されているデータのサイズ数』が分からなくても問題は無いのではないでしょうか? あと、『メモリに格納されているデータのサイズ数が分からない』のは何故なのでしょうか?
メンテ
Re: データハッシュの計算方法 ( No.4 )
名前:にこよん 日時:2017/10/12 06:46

> あと、『メモリに格納されているデータのサイズ数が分からない』のは何故なのでしょうか? 関数に渡すときに必要なので計算する時には分かりますが、 関数を作成する時にはどんなサイズ数が渡されるか「分からない」のでどのように可変的な?計算すればいいのかが分からないです。 重ね重ねすみません(;´・ω・)
メンテ
Re: データハッシュの計算方法 ( No.5 )
名前:管理人 日時:2017/10/14 01:32

> 関数を作成する時にはどんなサイズ数が渡されるか「分からない」のでどのように可変的な?計算すればいいのかが分からないです。 任意のデータサイズのデータの処理が分からないということでしょうか? もしそうでしたら、任意のデータサイズに対してどのように処理すれば良いかについても ご返信の No.1 でご紹介したサイトに記載されていますので、よろしければご覧になってみてください ( サンプルプログラムもあります )
メンテ
Re: データハッシュの計算方法 ( No.6 )
名前:yumetodo 日時:2017/10/14 02:37

>私がやりたいことは 先頭アドレスとそのデータのサイズ から一つのハッシュを計算する関数を作ることです。 とりあえずPicoSHA2とか使っとけば何も考えずにイテレータ(ないしポインタ)を渡すだけでいい感じに求めてくれます。 https ://github.com/okdshin/PicoSHA2 ライブラリを追加せず、と言うのは事前にビルドするのが面倒、というふうに解釈しましたが、 こいつなら、git cloneするなりsubmoduleに追加してincludeするだけのheader-onlyなので気楽に使えます。 ハッシュ計算の実装を自分で書くのはバグの温床なので労力を書ける場所を間違えている感を拭えません。 >計算方法はMD5などを利用したいと思っていますが、解読が困難(プロは含まない)であればなんでも構いません。 hash計算の結果と期待する正しいhashとの比較をする際に通常単なる文字列比較で実装しますが、 これだとバイナリ中に文字列が埋め込まれるのでかんたんに書き換え可能です。 問題となるのはどうやって正しいhash値を管理するかというところになり、 結局ネットワーク経由で都度落としてくるとかしないとバイナリエディタでexe開くだけでわかっちゃうように思います ファイル破損チェックにhash計算するのはいいと思うのですが、改造対策という点では役に立たないと思われます。 (同様の理由でDxArchiveのパスワード保護機能も個人的には利用価値を見いだせない)
メンテ
Re: データハッシュの計算方法 ( No.7 )
名前:にこよん (解決) 日時:2018/03/20 21:13

> とりあえずPicoSHA2とか使っとけば何も考えずにイテレータ(ないしポインタ)を渡すだけでいい感じに求めてくれます。 ありがとうございます。 ハッシュを求める機能を追加しようとしていた圧縮関数が今はうまく機能しない状態なので、 これを直すことができたら試してみようと思います。 > ハッシュ計算の実装を自分で書くのはバグの温床なので労力を書ける場所を間違えている感を拭えません。 ゲームのために作るというよりかは作ってみたいという気持ちが大きいです。(半分あきらめましたが...) > hash計算の結果と期待する正しいhashとの比較をする際に通常単なる文字列比較で実装しますが、 > これだとバイナリ中に文字列が埋め込まれるのでかんたんに書き換え可能です。 > 結局ネットワーク経由で都度落としてくるとかしないとバイナリエディタでexe開くだけでわかっちゃうように思います > ファイル破損チェックにhash計算するのはいいと思うのですが、改造対策という点では役に立たないと思われます。 バイナリ内のどこからどこまでが元データで、どこからハッシュなのかが分からないので時間は稼げませんかね? フリーソフト程度なので今回はここらへんで満足しておくことにします。(わざわざ何時間も掛けて改造しようとする人はいないでしょう) 一番の目的は適当に改造されたデータを読み込んでソフト自体がフリーズしてしまうのを防ぐためですので...(フルスクリーンなら再起動ものになってしまう) 追記: 2018年 3月 20日 (解決)をつけてなかったので編集
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存