10

Web アプリケーションのログイン システムを作成しています。DB にパスワードを保存するために、次のように sha256 を使用してパスワードを暗号化しています。

$salt ="sometext";
$escapedPW="userpass";
$saltedPW =  $escapedPW . $salt;
$hashedPW = hash('sha256', $saltedPW);
echo "<center>".$hashedPW."</center>";

データベースには、ユーザー、ユーザーのパスワード、およびハッシュを作成してユーザーのログインを検証するために使用されるソルトを保存しています。現在、パスワードを記載したメールをユーザーに送信する機能を実行していますが、ユーザーがメールを受信すると、sha256 暗号化パスワードに保存されているため、ユーザーは長い文字列を受け取り、ユーザーが想定しているパスワードではありません。知ること。

私の質問は、パスワードの暗号化ではなく、実際のユーザー パスワードを送信する方法があるということです。不可能な場合は、暗号化キーの逆引きを完了し、実際のパスワードを電子メールでユーザーに送信するために推奨される暗号化方法を教えてください。

4

2 に答える 2

8

質問のコメントで述べたように、ハッシュを逆にすることは実際にはオプションではありません。

しかし、あなたにできることは、他の人も同じことです。フォームの投稿先の登録コード (例: 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)")

いくつかの大まかなコード例。それが役立つことを願っています!

于 2013-09-06T22:40:52.817 に答える
4

プレーンテキストのパスワードを電子メールで送信しないでください。むしろ、コメントで提案されているように、時間制限のある使い捨ての「パスワードのリセット」リンクを送信してください。

@Henrik が提案する単純なハッシュは使用しないでください。標準の調整可能な仕事用パスワード KDF (PBKDF2,bcrypt,scrypt) を使用する

PHP 5.5 を使用できる場合は、標準のパスワード ハッシュ関数を使用します。PHP 5.5 をサポートするホストもありますが、それらを探して問い合わせる必要があります。

ウェブ上には、正しく行う方法を説明している場所がたくさんあり (例: https://wiki.mozilla.org/WebAppSec/Secure_Coding_Guidelines#Authentication )、間違って行う方法を説明している場所もたくさんあります。独自の認証システムを展開することを決定する前に、これを調査するために少し時間をかけてください.

于 2013-09-26T19:27:49.403 に答える