2017-01-21 5 views
0

私がhas_secure_passwordを使用する場合、ホワイトリストは:password,password_confirmation、およびpassword_digestです。 passwordは、password_digestというプレーンテキストで、bcryptによって暗号化されています。平文を知るには:encrypted_pa​​ssword in devise?

私のユーザモデルでdeviseを使用すると、encrypted_passwordフィールドしかありません。passwordのプレーンテキストを知る方法はわかりません。スキーマにはpassword fieldがありません。私は偶然、レールconsleを使ってデバッグします。だから誰でも平文の文字列を知る方法を教えてください。encrypted_password

+1

それはすべてのポイントです、あなたはそれを知るべきではありません。なぜあなたのアプリでそれを知りたい/必要があるのですか? – Iceman

+2

'bcrypt'は実際には暗号化ではなく、不正な命名のもう一つの例です。これは片方向の暗号で安全なハッシュですが、元に戻すことはできません。これはパスワードを処理する正しい方法の1つです。 – zaph

+0

私のアプリケーションではなく、dev環境では、時々私は自分のパスワードを忘れて、私はビューにテストするために私のアプリケーションにログインできません。だから私は平凡なテキストを取得しようとします。しかし、それを行う方法はありません。 –

答えて

1

平文パスワードをencrypted_pa​​sswordフィールドから取得する方法はありません。 しかし、パスワードを変更して、ユーザーモデルのpassword属性を設定することで、選択した任意の文字列に設定することができます。例:

user = User.find(34) 
user.password = "some password" 
user.save! 
+0

Downvoter、説明してくれませんか?そうでなければ、これと将来の答えを改善する方法はありません。 – Reub

+0

そうです。パスワードのプレーンテキストを取得する方法はありません。 'user.passowd'を試してみると、常に' nil'を返します。しかし、コマンド 'user.password = 'my password''でパスワードを更新すれば動作します。 –

0

パスワードを保存するためにハッシュ関数を使用することの全ポイントは、ハッシュ関数を逆転する方法がないことです。これが一方通行機能と呼ばれる理由です。

唯一の方法は、ハッシュ関数の結果が同じハッシュになるまで、すべての可能なパスワードを試すことです。これは、hashcatのようなパスワードクラッカーが行うものですが、GPUを使用してプロセスを並列化します。長く複雑なパスワードを選択した場合、これを行う時間は、攻撃者が完了するよりも時間がかかります。

CPU時間またはメモリ要件が高価なハッシュ関数を使用することは、パスワード保護にも重要です。パスワードキー導出関数を参照してください。

+0

暗号化にMD5またはSHAを使用していますか? –

関連する問題