小弟需要写一个用户登录的模块,现在已经完成了...但是由于密码是明文存在数据库的,
现在需要改为md5 加密,然后登录,希望给为前辈给点指导,最好是有源码的,谢谢。
(关于为什么用md5,之前也了解过一点,登录加密的用这最好。如果你们有更好的加密方式,也欢迎提出来)。
伊谢尔伦2017-04-17 14:47:14
$salt = sha1(uniqid(mt_rand(), true));
$pwd_db = sha1($salt.sha1($pwd_user));
$salt は、ユーザーの登録時に生成されるランダムなソルト値です。
$pwd_db は、データベースに保存されるソルト付きパスワード ハッシュです。
$salt と $pwd_db は両方ともユーザー テーブルに保存されます。
ここで、:
uniqid にはプレフィックス ( mt_rand)、最後にエントロピー (true) が付き、現在の時間のマイクロ秒数に基づく一意の数値です。
mt_rand は、より適切な乱数を生成するために使用されます。
sha1 によって生成される文字列の長さは次のとおりです。 40 ビット、フィールド タイプは char(40) に設定できます。
黄舟2017-04-17 14:47:14
ソルトを追加する
現在、主流のユーザー パスワード暗号化にはソルトを追加する必要があります。これは、MD5 のレインボー テーブルにはすでに 11 桁未満の「弱いパスワード」の大部分が含まれているためです。
そして多くの大規模 Web サイトのデータ漏洩により、md5 が爆発する危険性はさらに高まります。実際、md5 のハッシュを使用して、個人が頻繁に使用する Web サイトを見つけることができます。
疑似コード:
md5(パスワード + ソルト)
怪我咯2017-04-17 14:47:14
md5 の使用に問題はなく、業界で一般的に使用されているソリューションでもあります。
注意すべき点の 1 つは、パスワードを md5 暗号化する前にソルトを追加するのが最善であるということです。ソルトを追加しないと、弱いパスワードのセキュリティが非常に低くなります。
PHP中文网2017-04-17 14:47:14
投稿者は、データベースに平文を保存すべきではないとだけ述べています。データベースにデータを保存するには暗号化方式を使用するだけで十分ではないでしょうか。
暗号化方式はフロントエンドとバックエンドの両方で使用できます。
PHP中文网2017-04-17 14:47:14
savokiss が言ったように、md5(md5(password)+salt)
はすでにより良い解決策です。
より安全性を高めるには、Bcrypt などを検討してください。
ソルトの文字列を単に繰り返すのではなく、ID、ユーザー名、タイムスタンプなどを使用することをお勧めします。
黄舟2017-04-17 14:47:14
dz で使用:
md5(md5(パスワード)+salt)
ソルトはソルトです。グローバルに同じにすることも、ユーザーごとに一意にすることもできます。
md5 は可逆的ではありませんが、辞書を使用すると徹底的に解析できるため、単層 md5 を徹底的に解読するのは非常に簡単です。ただし、ソルトを追加すると、暗号化されたパスワードしか分からなくなり、ソルトは役に立ちません。 /p>
他の暗号化方法については、md5 をクラックする Web サイトを確認してください。Web サイト名は省略します。