3

私は大きなプロジェクトの登録システムに取り組んでいます。

サインアップが成功すると、サーバーはアクティベーションキーを生成し、それをユーザーの行に追加して、電子メールでユーザーに送信します。この目的のためにいくつかのパスワードジェネレータクラスを使用します。

問題は(抽象的に聞こえることは知っていますが、疑問に思うだけです)、パスの重複生成を回避する方法はありますか?つまり、将来、ジェネレーターがdbテーブルに既に存在するアクティベーションキーを作成できる可能性はありますか?キー生成後に重複をチェックする必要がありますか?

4

5 に答える 5

3

PEARのText_Passwordパッケージを使用することをお勧めします。このホイールを作り直そうとしないでください。

パスワードを強制的に一意にしないでください。 実際、その強制を行うことは安全性が低くなります。パスワードをxyzzyに設定しようとして、サイトから「できない」と表示された場合、あるアカウントがxyzzyをパスワードとして使用していることがわかります。どのアカウントを見つけるまで、すべてのアカウントでそのパスワードを試す必要があります。

生成されたパスワードとしてハッシュダイジェストを使用しないでください。 ユーザーは、32文字(またはそれ以上)の16進文字列を入力したくありません。私は2001年に、PKIおよびMD5ハッシュを使用して安全なソフトウェアアクティベーションキーパッケージをコーディングした経験があります。しかし、キーが長すぎるため、誰もそれを使用しませんでした。

パスワードを保存するには、ハッシュダイジェストとソルトを使用してください。 私たちの恐れを知らないリーダーによるこの記事を読んでください: あなたはおそらくパスワードを間違って保存しています。

他のいくつかのパスワード関連の質問に対する私の回答も参照してください。

于 2011-11-11T22:21:14.043 に答える
2

試してみてくださいuniqid()

于 2011-11-11T22:18:22.273 に答える
1

SHAやWhirlpoolなどのハッシュアルゴリズムを一意の入力(ユーザーの一意のユーザー名など)で使用すると、予想される衝突率が0のハッシュが生成されます。

私はこれのために私自身のアルゴリズムを転がしません。 uniqid()またはmd5()、前述のように、保証されたソリューションです。

于 2011-11-11T22:21:42.637 に答える
0

あなたは時間を使うことができます、しかしそれはあなたがそれにいくらかのランダムさを加えなければならないであろう「ランダム」ではありません...

$key = md5(time());
于 2011-11-11T22:18:04.217 に答える
0

GUIDは常に一意であり、システムによって生成されるため、登録キーとしてGUIDを使用します

于 2011-12-21T07:44:15.737 に答える