0

通常、Web サイトではパスワードは MD5 でエンコードされています。MD5でもユーザー名をファイル名としてエンコードすることを検討しています。LinuxベースのサーバーでPHPを使用します。PHP を使用してファイル名を MD5 に暗号化することには、復号化せずに区別できないこと以外に欠点はありますか?

<? php 
if(isset($_POST['register'])){
    $username = md5($_POST['username']);
    $email = htmlentities($_POST['email'], ENT_QUOTES|ENT_XML1);
    $password = $_POST['password'];
    $c_password = $_POST['c_password'];

    $xml = new SimpleXMLElement('<user></user>');
    $xml->addChild('password', md5($password));
    $xml->addChild('email', $email);
    $xml->asXML('users/'.$username . '.xml');

    header('Location: validate.php');
    die;
}
?>
4

3 に答える 3

2

H2C03が言及しているように、MD5は壊れています(コメントの彼のリンクを参照してください)。考慮すべき次の要因もあります。

  1. ユーザー名を解読できる人は誰でもパスワードを解読でき、その逆も可能です。そのため、何も得られません。
  2. これにより、多くのユーザー管理クエリを記述し、完全な悪夢をコード化することになります
  3. パスワードをハッシュすることが価値がある理由は、(理想的には)平文を元に戻す方法がないためです。サイトを機能させるには、ユーザー名をプレーンテキストに復号化するコードを含める必要があります。システムに既に存在するハッカーは、問題がなければ、復号化ルーチンにコードを追加してプレーンテキストのパスワードを迂回させるだけです。人々があなたのサイトを使用するように。

エグゼクティブサマリー:多くの余分な作業、最新の暗号化アルゴリズムを使用している場合でも疑わしい利点。

于 2012-11-13T22:13:33.320 に答える
1

使用しているLinuxファイルシステムは、ディレクトリ区切り文字を除いて、ファイル名の任意の文字を受け入れることができます。では、/文字を別の文字に置き換えたり、/(およびおそらく他の印刷できない文字)を含むユーザー名での登録を拒否したりしないのはなぜですか?「ああ、でも衝突はどう?」ハッシュアルゴリズムを使用している場合、衝突の可能性を排除するのではなく、無駄な計算の複雑さを追加しながら衝突を減らすだけです。一意の識別子を生成するには、増分値を使用するか(Unixが「ユーザーID」で行うように)、uuidを生成します:http://php.net/manual/en/function.uniqid.php-そしてそのマッピングをに保存しますデータベース。

ユーザー名からIDへのマッピングを維持することは、他の誰もが理由で行うことです。:)

于 2012-11-13T23:45:00.640 に答える
0

ユーザー名をファイル名にマップするために md5 のみを使用しているようです。これは一般的な一方向ハッシュ アルゴリズムです。

ただし、パスワードの暗号化には使用しません。

于 2012-11-13T22:31:57.780 に答える