エンジニアのひよこ_level10

【毎日更新!】新卒3年目エンジニアブログです!

暗号化とハッシュ化の、性質と使いみちの違い【880日目】

暗号化?ハッシュ化?

どう違うかはよく知らない・・・って方も多いと思います。

バックリとした説明を。

もとに戻せるのと戻せないもの

暗号化は、元の文字列に戻せるもの。
ハッシュ化は、元の文字列に戻せないもの。

暗号化

『暗号化』『復号』という言葉があるように、暗号化は、

"ringo"=(暗号化)=>"tomhp"=(復号)=>"ringo"

のようなことが出来ます。
暗号化する鍵と、復号するための鍵があれば出来るやつですね。

今回の暗号化はキーボードの右隣。復号はキーボードの左隣に動かせば元に戻せます。
暗号の法則(キー)を知らないと、この言葉が読めない。

暗号化したデータを盗聴されても、キーが無いからデータの内容を盗み見られない。
そんな秘密のやり取りをするために使われます。

ハッシュ化

"ringo"=(ハッシュ化)=>"653E775FAA591DA88A018AE959245B6C6CB2E63405E304C9FCBD632357B8031F4DBC849B67967DFA8B78787C89393063213FFE34F923E1A8BFE6115BFDDCD0E6"

このハッシュ化した文字列は、元の文字列に戻すことが出来ません。
もとに戻せないのに使いみちがあるのか?あります。パスワードです。

データベースには、ハッシュ化した文字列を入れます。
すると、データベースを見られても、元のパスワードはわかりません。

ですが、パスワードを入力フォームに入れたとして、ハッシュ化した時にデータベースと同じ値であれば、
そのパスワードが正しいということになります。

(例)
■DB: "653E775FAA591DA88A018AE959245B6C6CB2E63405E304C9FCBD632357B8031F4DBC849B67967DFA8B78787C89393063213FFE34F923E1A8BFE6115BFDDCD0E6"

■ユーザーの入力:
"ringo"=(ハッシュ化)=>"653E775FAA591DA88A018AE959245B6C6CB2E63405E304C9FCBD632357B8031F4DBC849B67967DFA8B78787C89393063213FFE34F923E1A8BFE6115BFDDCD0E6"

同じだから、パスワードは正しいのでログインさせる。
という仕組みになりますφ(・

パスワード平文保存?

一時期話題になった、パスワードの平文保存についてですが、
データベースにパスワードがそのまま保存されていたり、ハッシュ化ではなく暗号化でもとに戻せる形で保存されているという話。

だから、マイページとか、メールでパスワードがなぜか見れてしまう。
攻撃されてパスワード奪われたら困るよね・・・みたいなお話です。