Webアプリケーションのログインシステムを作成しています。 DBにパスワードを保存するために、sha256を使用してパスワードを次のように暗号化しています。
$salt ="sometext";
$escapedPW="userpass";
$saltedPW = $escapedPW . $salt;
$hashedPW = hash('sha256', $saltedPW);
echo "<center>".$hashedPW."</center>";
データベースには、ユーザー、ユーザーのパスワード、およびハッシュの作成とユーザーのログインの検証に使用されるソルトが格納されています。現在、パスワードを記載したメールをユーザーに送信する機能を実行していますが、ユーザーがメールを受信すると、sha256暗号化パスワードに保存されるため、ユーザーは、ユーザーが想定しているパスワードではなく、長い文字列を受信します。知るために。
私の質問は、実際のユーザーパスワードとパスワード以外の暗号化を送信する方法はありますか?つまり、ソルトを知っている場合は、sha256の逆を行う方法がありますか?不可能な場合は、暗号化キーの逆を完了し、実際のパスワードを電子メールでユーザーに送信するために、どの暗号化方法をお勧めしますか。
あなたの質問のコメントで述べられているように、ハッシュを逆にすることは実際にはオプションではありません。
しかし、あなたができること、そしてこれは他の誰もがすることです。フォームが投稿する登録コード(例:register.php)で、PHPスクリプトにパスワードを電子メールで送信させ、暗号化してデータベースに保存させることができます。
ある種の登録フォームがあり、そのフォームが新しいユーザーの詳細を別の(または同じ)phpスクリプトに投稿していると思いますね。
たとえば、私のフォームに<form method="post" action="register.php">
のようなものが書かれている場合
そしてregister.php
で私は次のようなものを持っているでしょう
<?php
$username = mysql_real_escape_string($_POST['username']);
$password = mysql_real_escape_string($_POST['password']); /*cleartext*/
$email = mysql_real_escape_string($_POST['email']);
mail($email,"New account","Your username \"$username\" and your password is \"$password\"");
$salt ="sometext";
$escapedPW="userpass";
$saltedPW = $escapedPW . $salt;
$hashedPW = hash('sha256', $saltedPW);
mysql_query("INSERT INTO users (username, password, email) VALUES ($username, $hashedPW, $email)")
いくつかの大まかなサンプルコード。お役に立てば幸いです。
プレーンテキストのパスワードを電子メールで送信しないでください。むしろ、コメントで提案されているように、期間限定の1回限りの「パスワードのリセット」リンクを送信してください。
@Henrikによって提案されているように、単純なハッシュを使用しないでください。標準の調整可能な作業パスワードKDF(PBKDF2、bcrypt、scrypt)を使用します
PHP 5.5を使用できる場合は、 標準のパスワードハッシュ関数 を使用してください。PHP 5.5をサポートするホストがありますが、それらを探してそれを求める必要があります。
それを正しく行う方法を説明するウェブ上の場所はたくさんあり(例: https://wiki.mozilla.org/WebAppSec/Secure_Coding_Guidelines#Authentication )、間違った方法を説明する場所もたくさんあります。独自の認証システムを導入する前に、これを調査するために少し時間を取ってください。