質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

3回答

112082閲覧

ハッシュ化されたパスワードを戻したい

earnest_gay

総合スコア615

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

1グッド

2クリップ

投稿2016/06/28 18:05

DBへパスワードを登録するときに
password_hash($_SESSION['join1']['pw'],PASSWORD_DEFAULT)
でパスワードをハッシュ化して登録したのですが、

プロフィール更新ページを作っていて
パスワードを取得して表示させたのですが
ハッシュ化されて表示されてしまっているので
このハッシュ化されたパスワードを解除(生パスワードに戻したい)する方法が知りたいです。

morimorinoki👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

ハッシュは非可逆です。元に戻すことは出来ません。

もし仮に戻せたとしたら、じゃあ何のためにハッシュ化したのか?ということになってしまいます。

ものすごく大雑把にハッシュというものを説明すると、ハッシュとは、「入力された文字列を1個おきに抜かした文字列を生成しよう」などというもの(とそれによって生成されたもの)なのです。
つまり、「あいうえお」が入力されたら「あうお」が出力され、「かきくけこ」だったら「かくこ」です。
ですから、「あうお」というハッシュから元の文字列を復元することは出来ないのです。入力が「あいうえお」でも「あきうけお」でも「あしうせお」でも全て「あうお」になるからです。よって「あうお」という文字列を見て元の文字列が何だったかなんて分からないのです。

実際のハッシュはもっと複雑なルールによって計算されていますが、とにかく元の文字列の情報は失われています。

しかし、同じ入力に対しては常に同じ出力なので、それを利用してパスワードなどの認証が実現されています。
ハッシュ化しておけば、パスワードが一致しているか確認できつつ、パスワードが何かは本人以外分からない、ということが実現できます。たとえばデータベースがクラックされてパスワードが流出したとしても、ハッシュ化されていれば、クラッカーもそれから元のパスワードが何だったかを知ることは出来ません。
もちろん、そのハッシュ化されているパスワードを、例えばログインページのパスワード欄に入力しても、それがさらにハッシュ化されるだけですので、やはりログインは成功しません。

…というセキュリティの余談でした。

投稿2016/06/28 18:23

編集2016/06/28 18:38
syuilo

総合スコア393

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

earnest_gay

2016/06/28 18:33

なるほど... 少し話が逸れるのですが、会員サイトを作るのは初めてなので教えていただきたいのですが、プロフィール更新ページでパスワードを変更させる場合は inputのtypeはpasswordで非表示にした方がよいでしょうか?
syuilo

2016/06/28 18:38

それで良いと思います。
earnest_gay

2016/06/28 18:48

追記ありがとうございます。 ログインする際の話では、確か hash_なんちゃら(入力したパスワード,DBへ登録されているハッシュ化されたパスワード) で照合できるので、ハッシュ化されたパスワードを元に戻せると思っていました。
syuilo

2016/06/28 18:53

それは単に、入力したパスワードをハッシュ化して、(すでにハッシュ化されている)DBに登録されているパスワードと一致するか見ているのです。
earnest_gay

2016/06/28 18:57

なるほど! ハッシュ化されたパスを戻して一致するか見てるのだと、逆に思ってました! ありがとうございます!
guest

0

パスワードの管理法についての参考情報を示しておきます。
最近では同じパスワードでも毎回異なるハッシュ値になるようになっており、
ハッシュ結果を単純に比較しただけではパスワード一致したかは判定できないyいうになっています。

...
同じ値をハッシュ化しても、出力されるハッシュ値(ソルト)が違うので、単純に文字列比較しても一致しない!!
...
じゃあ、どうするかというと専用の関数を使う。
Hash::check(‘平文’, bcrypt(‘平文’))で、自動生成されたソルトとコストでハッシュ化した後に比較してくれるので無問題!
...

...
大昔編その2 - 単純なHash化
現代編 その1 - saltの導入とmd5 から sha2 へ
現代編 その2 - ストレッチングの導入
現代編 その3 - bcrypt の登場
現代編 - 課題
未来編

投稿2016/06/28 21:37

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

earnest_gay

2016/06/29 04:33

詳しくありがとうございます! リンク先拝見させてもらいますね。
guest

0

ハッシュ化したものは元に戻せません。

投稿2016/06/28 18:26

googlecus

総合スコア52

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

earnest_gay

2016/06/28 18:34

わかりました... 回答ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問