おしりんブログ

新人PGおしりんの色々まとめるよブログ

用語まとめ~暗号化とハッシュ化、時々エンコード~

あれ、オカンとボクと、時々、オトン風な記事名、
前も使ったような…

それにしても休日終わるの早杉内。
今日も元気にジマテーションです。


今日は家で鳥くん達とお絵かきしてました。
せっかくなので、わたしの絵と鳥(カツ)コラボしました。

f:id:shiori_west:20140727225130j:plain

キュウべぇならぬ、カツべぇです…
ンガワイイ!!!!(親ばか)

既に契約済みのまどっちに声をかけています!
アホガワイイ!!!!


雑談はこのくらいにして、
今日は暗号化とハッシュ化の違いについて
ちょちょっとまとめるでござる。

違いも何も、暗号化とハッシュ化って全然別物やん!
何言うてんのこのこは!

と、思った方はそっと退出をお願いします…


わたしついこの間まで
「暗号化」と「ハッシュ化」って同義語だと思ってました。


業務中に、暗号化するメソッドを作ったり、
ハッシュ化するメソッドを作ったことはあったんだけど、
2つの単語についてちゃんと調べたことがなくて、

「パッと見ただけでは理解する事が出来ない形に変えること」
と、感覚的に思い込んでいました。


がしかし、両者には決定的な違いがありました。

・暗号化
 可逆な存在
 =複合することができる
 =変換方式が決まっているため、だれでも復元(decode)できる。

ハッシュ関数
 不可逆な存在
 =複合することが出来ない


可逆な存在といえばBase64
エンコード(暗号化)も出来るし、デコード(複合化)もできる。
(でもね、厳密には暗号化=エンコードとは言えないんだよ…)
(詳しくはもう少し下で…)

逆に、不可逆な存在といえばSHA-1
こっちは複合化することが出来ない。


複合できないってことは、たとえば
ウェブアプリケーションAからウェブアプリケーションBに
パスワードを送る場合、

もし通信途中に誰かがパスワードを盗み見ても
パスワードの内容を知られることはない!ってことだ!

おお~!セキュリティ!


ちなみに、ハッシュ化した値を確認したい場合は、
「ハッシュが同じ値になる」ことでしか
一致かどうかを確認することが出来ないのだ~

(いい言い回しが思い浮かばない)


ちなみに、さっき上で少し触れた、
Base64エンコード」は「暗号化」するとは言えない件について…


「暗号化する」も「エンコードする」も
"データを変換する"という意味では同じなんだけど、

IT業界では、

「暗号化する」は、
第3者にバレないように変換する。(当事者しか復元できない)

エンコードする」は、誰でも復元できる

っていう観点から、「暗号化」と「エンコード」は
全く別の意味を持つ単語っていう解釈が一般的なんだって。

エンコードする」は「記号化する」って解釈すべきなんだって。


ほむほむ。
むずかしいな!


ちなみに今日の記事の内容、

先日投稿した記事の中で
「暗号化」と「ハッシュ化」を同義語として扱っていた私に、

大阪の栗先生がわざわざスカイプで
両者の違い(+アルファ)について特別授業を開いてくれたんですが、
その内容をまとめたものです。

栗先生、本当にありがとうございました。


あ、あとこれもこれも。
栗先生が送ってくれたスカイプの内容そのままのっけるけど、

「余談ですが、
Base64は、インターネットと関連してるのよ。
たとえば、メールの通信規格だと、テキストデータしか扱えないんです。
なのに、画像ファイルや音楽ファイルをバイナリデータを添付できるよね。
なぜ?
http://e-words.jp/w/BASE64.html


はい、わたしこの「なぜ?」に答えていませんでした。

答えは添付してくれたURLに載ってるんだけど、
これをまとめると、

「送信時に一定のルール(=Base64)に従ってデータを文字(テキスト)に置換し、
受信後に元のデータに復元(デコード)する、という手法が取られているから。」


普段生活してる中で、常にめちゃくちゃお世話になってたんだね…
Base64、あにがとう…


栗先生、また特別授業お願いします。

つぎの記事いくぞ~