強引な人や神も(笑)。偽ファイルの正解率。
サーチマン佐藤です。
こんにちは。
前回の記事で、
「かに道楽の偽画像ど~れだ?」
というクイズ、出しましたね。
この回答結果、いきますね。
━━━━━━━━━━━━━━━━━
【質問】
改ざんした画像ファイルは、どれ?
(詳しくは、前回記事見てね)
━━━━━━━━━━━━━━━━━
【回答結果】
・かに道楽1
151票(17.6%)
・かに道楽2
331票(38.6%)
・かに道楽3
28票(3.3%)
・かに道楽4
42票(4.9%)
・やればわかるけど時間ない
98票(11.4%)
・さっぱりわからない
160票(18.7%)
・問題の意味がわからない
27票(3.2%)
・そのほか
20票(2.3%)
━━━━━━━━━━━━━━━━━
早速ですが、正解を言いますと、
「かに道楽2」になります。
正解の方、おめでとうございます。
それにしても、今回のクイズ、
多くの方がトライし(感謝)、
そして正解を導いてくれました。
いくつかの方法、紹介しましょう。
【読者から】
====================
なかなか面白いお題ですね。
力業ですが、メモ帳で開いて
中身を確認しました(笑)
力業ではない方法、
ありますよね~
メルマガでの回答、
楽しみにしてます!
====================
えっ、メモ帳で開いた!?
強引すぎるでしょ(笑)
いやいや、でも、
お疲れさまでした。
正解者のうち1割くらいかな、
・・・めっちゃ強引な方が。
もう少しスマートな方法は、
後述するとして、次いきましょう。
【読者から】
====================
プロパティ見ると、
若干サイズが違うんですよね~
====================
確かにですね。
キロバイトで見ると同じですが、
バイトレベルで見ると、
若干違うんですよね。
こんな感じで、
サイズからのアプローチは、
2割くらいだったでしょうか。
でもね、今回のクイズは、
これでOKですが、
サイズが同じでも、
中身が全然違うファイル、
いくらでもありますよね。
その時、どうするのか?
それは後述しますが、
その前に、ある意味、
神レベルの読者が(笑)。
思わず、大笑いでした。
【読者から】
====================
画像よく見ると、
かに道楽2だけ、少し白い。
====================
ほんまかいな!?(笑)
確かに、少しだけ、
一部に白で加工したのですが、
目で見て、わかりますか?
神、神ですよ。
驚きましたが(笑)、
ありがとうございました。
では、最後に、
スマートで王道的な方法。
【読者から】
====================
ハッシュ値で比較しました。
====================
はい、まさに。
そう、ハッシュ値です。
知らない人も多いので、
一応、簡単に解説すると、
全てのファイルの中身は、
(1文字でも、1Gでも)
ファイルサイズに関わらず、
ハッシュ関数にかけると、
固定長の文字列になる。
えっ?!
って気分でしょうが、
続けて聞いてください。
で、重要なのは、
中身が少しでも違えば、
固定長の文字列の中身も、
全く違ったものになる。
この特徴です。
たぶん、初めて聞くと、
こんな疑問がわく。
ファイルの中身なんて、
無限にあるのに、
それらは全て、
固定長の文字列で
ユニーク表現できるのか?
衝突しないのか?と。
はい、疑問はごもっともですが、
衝突ないし、ユニークなのです。
まあ、本当に衝突なしってのは、
別途で議論もあるのですが、
我々レベルで扱うなら、
衝突ゼロでいいのです。
なので、結論だけ言えば、
中身が少しでも違えば、
ハッシュ値は違ってくる。
この特性で調べるのです。
・・しっくりこない方、
具体的にいきましょうね。
どんなファイルでもいいですが、
例えば、前回のクイズなら、
ファイル(kani1.jpg)に対して、
Windowsの場合は、
コマンドプロンプトで、
> certutil -hashfile kani1.jpg
という感じで使います。
Macの場合は、ターミナルで、
$shasum kani1.jpg という感じ。
たぶん、こんな値がでる。
dc4126182fb677db9b
793cca14355fc854471e4c
これを、1~4.で調べると、
違いがわかりますね。
まあ、ハッシュ関数は、
色んなロジックがあるので、
上記は一つの例ですが、
同じロジックで調べれば、
kani2.jpgだけ違うのがわかります。
簡単にできるし、ハッシュは、
セキュリティやビットコイン、
色々使われている基本技術なので、
是非、一度は試してみましょうね。
ではでは、
またお会いしましょう。
ありがとうございました。