パスワードをハッシュするためにSHA-512を使用しています(もちろんソルトを使用)。私が望んでいることは可能ではないと思いますが、とにかく尋ねましょう。
文字列が既に SHA-512 (または別のアルゴリズム) ハッシュであるかどうかを確認する方法はありますか?
ユーザーがログインするときに、パスワードをチェックしたいと思います。まだプレーン テキストの場合は、安全な形式に変換する必要があります。
タスクは非常に単純で、文字列をチェックする必要はありません。
入力したパスワードと保存したパスワードを最初に比較するだけです。
一致した場合-ここでは、プレーンパスワードです。したがって、変換プロセスを開始できます。
@zerkmsがすでに述べたように、文字列の長さはテストできる最も明白なものです。また、ハッシュは通常16進数で記述されるため、0〜9の数字とa〜fの文字のみで構成されます。または正規表現として
/[0-9a-f]{64}/i
私はこの質問に少し混乱しています。
ユーザーが自分のパスワードをWebサイトに入力すると、の値$_POST['password']
(または名前を付けたもの)はプレーンテキストであると見なすことができます。ユーザーがハッシュ関数の結果をパスワードとして使用している場合でも、アプリケーションに関する限り、それはプレーンテキストであるため、それは問題ではありません。つまり、ハッシュされた値は、ユーザーが作成する手順に関係なく、ユーザーのパスワードです。その値をシステムに入力すると、そのユーザーがアクセスできるようになるためです。サーバー上でユーザーが送信したパスワードをハッシュすることのポイントは、ユーザーがそのユーザーのパスワードを知らないようにすることです。そうすれば、データベースが危険にさらされても、ユーザーのパスワードは公開されません。
パスワードを取得したら、そのユーザーのソルトパスワードとハッシュパスワードをデータベースから取得します。送信されたフォームを取得し、ユーザー固有のソルトでハッシュしてから、データベースから事前にハッシュされたパスワードと比較します。ハッシュされた送信と事前にハッシュされたデータベースの値が一致する場合は、正しいパスワードが入力されたと見なすことができます。
あなたが説明しているように物事を行うために私が見ることができる唯一の理由は、以前にパスワードをプレーンテキストで保存していて、現在すべてをハッシュに変換している場合です。その場合は、各ユーザーに一意のソルトを割り当て、現在のプレーンテキストのパスワードとソルトをハッシュして、それを新しいパスワードとして保存するだけです。この変換は、「ハッシュワード」が有効になっているときに、ユーザーが移行後に初めてログインするときに少しずつ行うのではなく、一度に行う必要があります。
明らかに推測する唯一の方法は、文字列の長さを確認することです。こんなに長いパスワードを持っている人はいないに違いない。
ユーザーがフォームを送信するときにユーザーパスワードをハッシュできます。これにはもちろんJavaScriptが必要です。
function myOnSubmit(aForm) {
//Getting the password input object
var inputPassword = aForm['password'];
//Hashing the password before submitting
inputPassword.value = sha512_hash(inputPassword.value);
//Submitting
return true;
}
フォームは次のようになります。
<form onsubmit="return myOnSubmit(this);">
<input type="text" name="login"><br>
<input type="password" name="password"><br>
<input type="submit" name="send">
</form>
ご存知のように、JSにはsha512ネイティブ関数が付属していないので、sha512関数が必要です。これを確認してください。
ログイン中にハッシュ化されたパスワードを確認する必要があるのはなぜですか。パスワードとしてハッシュ化された文字列を入力するユーザーはいません。
あなたはこのようにチェックする必要があります
if (sha1($input_password) === 'your hased password') {
//go ahead
}