■もくじ
1.HASH(ハッシュ)とは?
2.HASHの種類について
3.なぜHASH Database と言うものが誕生したのか?
4.実際に役に立っているのか?
5.「詳細が分からない絵はここで聞け」スレで出ているよくある疑問
6.Database登録済みのデーターがほしい
7.登録済みデータを使ったサイトやスクリプト、ソフトなどを作成したい。
8.自分のサイトにフォームを設置してImage Databaseの検索機能を使いたい。
9.Image Database の検索機能を使うスクリプトやソフトを作成したい。
10.ファイルのハッシュを自分で求めるには?
11.ハッシュリストで検索するには?
12.類似画像検索とは?
13.類似率とは?
HASHとはファイルの同一性確認(破損および改竄のないことの確認)や認証に用いられるもので
それぞれのハッシュ規格に沿った計算方法で生成することが出来る。
また、HASH生成元のサイズに関係なく一定長のデーター列を生成する。
なお、HASHから生成元のファイルを復元したりすることは出来ず、
また異なるファイルから同じハッシュが出る可能性は少ない。
※ビット数の少ないHASHの場合組み合わせに限界があるためなるべくビット数の多いものの方が良い。
ファイルの同一性確認用途のハッシュに関して簡単に言えばファイルの身分証明書みたいなものです。
※ちなみにHASHはファイルの内容が1byteでも書き換わると全く違うものが生成されます。
Image Hash Databaseではこのファイル同一性確認用途で使っています。
#なお、当たり前ですがHASHはURL文字列ではなく画像ファイル本体から算出します。
#まぁ考えれば分かる事ですがURLから求めたら役に立ちません…
補足:Image Hash DatabaseではMD5ハッシュアルゴリズムを使っています。
異なるファイルから全く同じハッシュ値が出る確率 CRC32 168=4,294,967,296
42億9496万7296分の1の確率MD5 1632=340,282,366,920,938,463,463,374,607,431,768,211,456
340澗2823講6692壌0938杼4634垓6337京4607兆4317億6821万1456分の1の確率SHA1 1640=1,461,501,637,330,902,918,203,684,832,716,283,019,655,932,542,976
1極4615載0163正7330澗9029講1820壌3684杼8327垓1628京3019兆6559億3254万2976分の1の確率SHA-256 1664=115,792,089,237,316,195,423,570,985,008,687,907,853,269,984,665,640,564,039,457,584,007,913,129,639,936
1157(読無)9208無量大数9237不可思議31619那由他5423阿僧祇5709恒河沙8500極8687載9078正5326澗9984講6656壌40564杼0394垓5758京4007兆9131億2963万9936分の1の確率
・CRC16/32 CRC(Cyclic Redundancy Check)はハッシュとしては使われていませんが
※一方向性にかける
ファイルの同一性チェックや破損チェックなどによく用いらます。
※デバイス間の通信やネットワーク通信によるデーター破損等の検査
CRC16は4桁(164=65,536通り)
CRC32は8桁(168=4,294,967,296通り)
の値(16進数)をそれぞれ生成する。
・MD5 MD5(Message Digest 5)は広く一般的に使われるハッシュでRFC1321で定義されている。
MD4やMD2などの類似ハッシュもある。
MD5は32桁(1632=340,282,366,920,938,463,463,374,607,431,768,211,456通り)
の値(16進数)を生成する。
・SHA1 MD5に脆弱性が発見された際にNSAがNIST用のSHS(Secure Hash Standard)を考案、
後に修正が加えられSHA(Secure Hash Algorithm)となり
さらに修正が加えられたものがSHA1と呼ばれる。
SHA1は40桁(1640=1,461,501,637,330,902,918,203,684,832,716,283,019,655,932,542,976通り)
の値(16進数)を生成する。
これらの他にも色々あるが一般的でなおかつPHPで簡単に求められるハッシュだけを書いておきます。
たぶんPerlにもMD5の計算関数は用意されていると思う。
C言語とかは関数組んでやる必要があるかも…
3.なぜHASH Database と言うものが誕生したのか?
作るきっかけになったのは2chの半角二次元板にある「詳細が分からない絵はここで聞け」スレで
あまりにも既出質問が増加しなおかつ同一スレッド内での同一質問が増加したため
テンプレルールの改修とテンプレサムネイルの作成と同時に提案された
「画像のハッシュでDBを作成すればいいのでは?」と言う発言がきっかけです。
※「言い出しっぺが作れ」などと荒れたり…
これは利用者個々が判断することであり管理者がどうこう言える質問ではありません。
ちなみに運営開始(2003/11/23)~2004年02月前半頃までは
検索だけの利用が大半でデーター登録は希でした。
#登録してくれてるのは特定の人物だけという状態
なので登録済み率は下がることはあってもこれ以上はあまり上がらないものと思われます。
なお、現在は定期的に検索回数10以下で未登録の統計はDBスペース節約の観点から削除しています。
5.「詳細が分からない絵はここで聞け」スレで出ているよくある疑問
Q1.同じ絵の画像ファイルでも登録済みだったり未登録だったりデーターがバラバラなんですが…
A1.コレに関しては色々あります
1.同じ絵でもファイル(バイナリ)構造が違う(1.HASH(ハッシュ)とは?「ファイルの同一性チェック」)
2.画像取得時に破損した(現在は相手サーバーが送信するファイルサイズを確認しています。)
3.Databaseがダウンしているもしくはデーターの更新作業中
(定期的にバックアップと登録データーの統一作業を行っています)
Q2.ページが表示されない重い
A2.まぁコレに関しては結構好き勝手出来るサーバーなので他のサーバーに移動して運営する
と言う事が出来ません…
スマソ。
Q3.未登録のはずなのに登録済みと出てデーターを登録できない。
A3.管理者に詳細をご連絡ください。(※BBSの「不具合?それともおいらだけ? スレ」にご報告ください。)
画像取得系の場合相手サーバーが直リンク対策で違う画像を渡している可能性があります。
Q4.使い方がわからない、検索しても未登録でした(登録済みと指摘を受けた際など)
A4.URLかHASHを放り込んで検索ボタンをクリックするだけですが…
Q5.HASHのメリットデメリット
A5.メリットは保管するデーター量がサムネイルに比べとても少ないのと著作権問題に抵触する可能性が少ないと言う点です。
デメリットは「A1-1」です。
Q6.要望および提案があるのですが?
A6.管理者に詳細をご連絡ください。(※BBSの「要望スレ」にご報告ください。)ちなみに2chのスレッドの方で目に入ったものも導入されています。
今まで要望および提案されたもので導入されているもの(されたもの) ハッシュ別検索数カウンター改善案(登録/未登録 表示&割合の追加) ファイルアップロードによるハッシュ検索(利用者数低下により2004/05/12廃止) WEB上の画像取得によるハッシュ検索改善案(ファイルサイズ確認) ハッシュ検索結果表示改善案(参照回数の追加) ハッシュ検索改善要望(一件検索から複数検索へ移行) ハッシュ検索改善案(ハッシュとURLの検索を統合。混合検索が可能に。) 検索フォーム改善案(空白区切りから改行区切りへ移行) スレ内既出チェック スレッドチェッカー(回答/DB登録状態の表示) 同一詳細複数画像登録フォーム(URL Only) 書籍Database ハッシュ検索ランキング 同一詳細複数画像登録フォームURL入力欄変更
メニューからデーターのダウンロードが出来ます。
7.登録済みデータを使ったサイトやスクリプト、ソフトなどを作成したい。
私的利用用途以外(自分以外の人が使う等)で使う場合は一旦ご連絡ください。
※私的利用用途以外には登録済みデーターを元に作成したデーターを公に公開することも含みます。
なお、データーの自動更新をサポートしたツールを作る場合最低限HTTPヘッダーが理解できることが必要となります。
DBのデーター取得
8.自分のサイトにフォームを設置してImage Databaseの検索機能を使いたい。
このような使い方は理由を問わず禁止とさせていただきます。
9.Image Database の検索機能を使うスクリプトやソフトを作成したい。
ブラウザーに組み込む検索補助ツールなど
Image Databaseの検索機能を使うスクリプトやソフトを作成した場合
管理者にご連絡の上利用許可を取ってください。(※BBSの「要望スレ」にご連絡ください。)
ファイルのハッシュを求めるには、まずファイルをバイナリエディタで開いて
プリントアウト後関数電卓で…
等と面倒な事はする必要はありません。
簡単にソフトウェアを使って求める事が出来ます。
OS名 ソフトウェア名 Windows ・FastHash
(CRC16/CRC32/MD5
SHA-1/SHA-256/SHA-384/SHA512
RIPEMD-128/RIPEMD-160/RIPEMD-256/RIPEMD-320)
・wMD5sum
(MD5)
※括弧の中は算出可能ハッシュアルゴリズム名MAC 見つけられなかった…
と言うかいつ閉鎖した林檎の杜!Linux デストリビューションによって異なるかもしれないが
MD5ハッシュを求めるコマンドがあるのでそれを使う。
■ソフトウェアが入手できない場合は?
PerlやPHPが動くならそれらを用いても求める事が出来ます。
これらも動かない場合はソフトウェアを自作するか諦めるしか有りません。
・PHPの場合
<?php
echo md5_file("ファイルへのパス");
?>
ハッシュリストを使った検索を行う場合はファイルのアップロードに対応したブラウザーで
ハッシュリストをサーバーにアップロードする必要があります。
対応ハッシュリストフォーマットは以下の通り
・WINCRCフォーマット
・HASH毎に改行したHASHだけのリスト
当然ですが、ハッシュリストに記載されるハッシュはMD5である必要があります。
HASHリスト検索
類似画像検索とはそのまんまの意味で似通った画像を検索するものです。
また、検索を行うための画像毎の特徴点の作成にはいろいろな手段や方法があります。
※色差/輝度/輪郭/ベクトル/etc.
類似画像検索のメリットは
画像を再圧縮したり、リサイズしても有る程度までは検索できる点です。
※↑ハッシュ検索ではデメリットに属する
特徴点の一致率です。
ただし、検索元の画像でも類似率が100%にならない事がありますが仕様なので気にしないでください。
※画像の状態によっては40%~50%の類似率でも見た目の内容は一致している事があります。