Good to Know Database

Passwortgenerator mit MD5-Hash


1. Einleitung

In diesem Tutorial möchte ich meinen Passwortgenerator vorstellen mit welchem Sie Passwörter aus einer Kombination von Buchstaben, Zahlen und Sonderzeichen erstellen können. Als kleine Zusatzfunktion wird nicht nur das Passwort angezeigt sondern auch der MD5-Hash des Passwortes.

2. Das Script

Wie Sie im nächsten Kapitel sehen, ist der Quellcode sehr umfangreich. Da für den eigentlichen Passwortgenerator nicht alles relevant ist, möchte ich hier nur auf die wichtigsten PHP-Skripte eingehen und die HTML- und CSS-Abschnitte überspringen.

Im ersten PHP-Abschnitt werden vier Arrays mit den Buchstaben, Zahlen und Sonderzeichen gefüllt welche später im Passwort verwendet werden können. Des Weiteren werden noch Variablen definiert welche wir im Skript für die Ausgabe benötigen werden.

<?php
  $characters_1 = array("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z");
  $characters_2 = array("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z");
  $numbers = array("0","1","2","3","4","5","6","7","8","9");
  $symbols = array("!","§","$","%","&","=","?","#","*","|");
  $error = "";
  $password = "";
  $md5sum = "";

Der nächste Abschnitt wird erst ausgeführt wenn das Formular mit den Benutzereingaben abgesendet wird. Damit dies sichergestellt wird, überprüfen wir ob die Variable $_POST["submit"] gesetzt ist.

  if (isset($_POST["submit"]))
    {

Danach erfolgt eine Überprüfung der Benutzereingaben. So muss mindestens eine Gruppe von Zeichen ausgewählt worden sein und die Passwortlänge darf 100 Zeichen nicht überschreiten. Die Passwortlänge können Sie natürlich beliebig ändern, denken Sie aber bitte daran die Sicherheitsabfragen und Ausgaben dementsprechend anzupassen.

      if (!isset($_POST["characters_1_check"]) && !isset($_POST["characters_2_check"]) && !isset($_POST["numbers_check"]) && !isset($_POST["symbols_check"]))
        $error = "At least one group of signs must be selected.";
      elseif ($_POST["length"] > 100)
        $error = "The maximum password length is 100.";

Wurden alle Sicherheitsaspekte überprüft, wird der Passwortgenerator aufgerufen.

      else
        {

Zuerst wird der Startwert für den Zufallsgenerator festgelegt.

          srand((double)microtime()*1000000);

Danach folgt eine While-Schleife in welcher in zufälliger Reihenfolge immer ein Wert aus den Arrays für die Buchstaben, Zahlen und Sonderzeichen zum Passwort hinzugefügt wird. Sollte eine Zeichenkette nicht ausgewählt worden sein und wird diese durch rand(0,3) ausgewählt, wird diese übersprungen und die Schleife wird nochmals durchlaufen.

          $i = 0;
          while($i < $_POST["length"])
            {
              $group = rand(0,3);
              if ($group == 0 && isset($_POST["characters_1_check"]) && $_POST["characters_1_check"] == true)
                {
                  $password .= $characters_1[rand(0,25)];
                  $i++;
                }
              if ($group == 1 && isset($_POST["characters_2_check"]) && $_POST["characters_2_check"] == true)
                {
                  $password .= $characters_2[rand(0,25)];
                  $i++;
                }
              if ($group == 2 && isset($_POST["numbers_check"]) && $_POST["numbers_check"] == true)
                {
                  $password .= $numbers[rand(0,9)];
                  $i++;
                }
              if ($group == 3 && isset($_POST["symbols_check"]) && $_POST["symbols_check"] == true)
                {
                  $password .= $symbols[rand(0,9)];
                  $i++;
                }
            }

Am Ende der While-Schleife befindet sich in der Variablen $password das generierte Passwort. Wie schon erwähnt, wollen wir auch den MD5-Hash des Passworts anzeigen welcher in der folgenden Zeile berechnet wird.

          $md5sum = md5($password);
        }
    }
?>

Der bisherige Quellcode war für das erzeugen des Passwortes zuständig. Wie aber schon erwähnt, benötigen wir auch ein Formular mit dessen Hilfe man einstellen kann welche Zeichenketten verwendet werden sollen und wie lang das Passwort sein soll. Das Formular könnte wie folgt aussehen.
Da hier keine unbekannten Funktionen benutzt werden, möchte ich nicht näher darauf eingehen. Es sei nur erwähnt, dass die Einstellungen beim Absenden des Formulars gespeichert und auch wieder eingetragen werden.

<form name="password-generator" action="#" method="post">
<table>
  <tbody>
    <tr>
      <td colspan="2"><h1>Password-Generator</h1></td>
    </tr>
    <tr>
      <td><b>Characters:</b></td>
      <td><input type="checkbox" name="characters_1_check" <?php
        if (!isset($_POST["submit"]) ||
        isset($_POST["characters_1_check"])) echo 'checked="checked"';
      ?> />(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z)</td>
    </tr>
    <tr>
      <td></td>
      <td><input type="checkbox" name="characters_2_check" <?php
        if (!isset($_POST["submit"]) ||
        isset($_POST["characters_2_check"])) echo 'checked="checked"';
      ?> />(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z)</td>
    </tr>
    <tr>
      <td><b>Numbers:</b></td>
      <td><input type="checkbox" name="numbers_check" <?php
        if (!isset($_POST["submit"]) || isset($_POST["numbers_check"]))
        echo 'checked="checked"';
      ?> />0,1,2,3,4,5,6,7,8,9)</td>
    </tr>
    <tr>
      <td><b>Symbols:</b></td>
      <td><input type="checkbox" name="symbols_check" <?php
        if (isset($_POST["symbols_check"])) echo 'checked="checked"';
      ?> />(!,§,$,%,&,=,?,#,*,|)</td>
    </tr>
    <tr>
      <td><b>Length:</b></td>
      <td><input type="text" name="length" value="<?php
        if (isset($_POST["length"])) echo $_POST["length"];
        else echo "10"; ?>" maxlength="3" class="input" /></td>
    </tr>
    <tr>
      <td></td>
      <td><input type="submit" name="submit" value="Generate Password"
      class="submit" /></td>
    </tr>
<?php
  if (isset($_POST["submit"]) && $error != "")
    {
?>
    <tr>
      <td colspan="2">&nbsp;</td>
    </tr>
    <tr>
      <td colspan="2"><b><?php if ($error != "") echo $error; ?></b></td>
    </tr>
<?php
    }
  elseif (isset($_POST["submit"]))
    {
?>
    <tr>
      <td colspan="2">&nbsp;</td>
    </tr>
    <tr>
      <td><b>Password:</b></td>
      <td><input type="text" name="password" value="<?php
      echo $password; ?>" readonly="readonly" class="output" /></td>
    </tr>
    <tr>
      <td><b>MD5sum:</b></td>
      <td><input type="text" name="md5sum" value="<?php
      echo $md5sum; ?>" readonly="readonly" class="output" /></td>
    </tr>
<?php
    }
?>
  </tbody>
</table>
</form>

3. Das komplette Script

Hier möchte ich Ihnen noch den kompletten Quellcode zur Verfügung stellen.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  <meta http-equiv="Content-Language" content="en" />
  <meta name="Author" content="Georg Kainzbauer" />
  <meta name="Keywords" content="Password-Generator" />
  <title>Password-Generator</title>
  <style type="text/css">
    body {
      margin: 2px;
      background-color: #999999;
      color: #000000;
      font-size: 16px;
      text-align: center;
      text-decoration: none;
      }

    .content {
      padding: 5px;
      position: relative;
      width: 550px;
      overflow: hidden;
      border-style: solid;
      border-width: 1px;
      background-color: #CCCCCC;
      color: #000000;
      font-size: 16px;
      text-align: left;
      text-decoration: none;
      }

    table {
      width: 100%;
      border-style: none;
      border-width: 0px;
      border-spacing: 1px;
      vertical-align: top;
      }

    h1 {
      font-size: 20px;
      text-align: center;
      text-decoration: none;
      }

    input {
      width: 30px;
      border: 1px solid #000000;
      background-color: #BBBBBB;
      font-size: 12px;
      font-family: Helvetica,Arial,serif;
      }

    .submit {
      width: 130px;
      font-weight: bold;
      }

    .output {
      width: 400px;
      border: 1px solid #000000;
      background-color: #BBBBBB;
      font-size: 12px;
      font-family: Helvetica,Arial,serif;
      }

    .footline {
      font-size: 12px;
      text-align: right;
      text-decoration: none;
      }

    a:link, a:visited {
      color: #000000;
      font-size: 12px;
      font-weight: bold;
      font-family: Helvetica,Arial,serif;
      text-decoration: none;
      }

    a:hover, a:active {
      background-color: #BBBBBB;
      color: #000000;
      font-size: 12px;
      font-weight: bold;
      font-family: Helvetica,Arial,serif;
      text-decoration: none;
      }
  </style>
</head>
<body>
<?php
  $characters_1 = array("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z");
  $characters_2 = array("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z");
  $numbers = array("0","1","2","3","4","5","6","7","8","9");
  $symbols = array("!","§","$","%","&","=","?","#","*","|");
  $error = "";
  $password = "";
  $md5sum = "";

  if (isset($_POST["submit"]))
    {
      if (!isset($_POST["characters_1_check"]) && !isset($_POST["characters_2_check"]) && !isset($_POST["numbers_check"]) && !isset($_POST["symbols_check"]))
        $error = "At least one group of signs must be selected.";
      elseif ($_POST["length"] > 100)
        $error = "The maximum password length is 100.";
      else
        {
          srand((double)microtime()*1000000);
          $i = 0;
          while($i < $_POST["length"])
            {
              $group = rand(0,3);
              if ($group == 0 && isset($_POST["characters_1_check"]) && $_POST["characters_1_check"] == true)
                {
                  $password .= $characters_1[rand(0,25)];
                  $i++;
                }
              if ($group == 1 && isset($_POST["characters_2_check"]) && $_POST["characters_2_check"] == true)
                {
                  $password .= $characters_2[rand(0,25)];
                  $i++;
                }
              if ($group == 2 && isset($_POST["numbers_check"]) && $_POST["numbers_check"] == true)
                {
                  $password .= $numbers[rand(0,9)];
                  $i++;
                }
              if ($group == 3 && isset($_POST["symbols_check"]) && $_POST["symbols_check"] == true)
                {
                  $password .= $symbols[rand(0,9)];
                  $i++;
                }
            }
          $md5sum = md5($password);
        }
    }
?>
<center>
<div class="content">
<form name="password-generator" action="#" method="post">
<table>
  <tbody>
    <tr>
      <td colspan="2"><h1>Password-Generator</h1></td>
    </tr>
    <tr>
      <td><b>Characters:</b></td>
      <td><input type="checkbox" name="characters_1_check" <?php if (!isset($_POST["submit"]) || isset($_POST["characters_1_check"])) echo 'checked="checked"'; ?> />(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z)</td>
    </tr>
    <tr>
      <td></td>
      <td><input type="checkbox" name="characters_2_check" <?php if (!isset($_POST["submit"]) || isset($_POST["characters_2_check"])) echo 'checked="checked"'; ?> />(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z)</td>
    </tr>
    <tr>
      <td><b>Numbers:</b></td>
      <td><input type="checkbox" name="numbers_check" <?php if (!isset($_POST["submit"]) || isset($_POST["numbers_check"])) echo 'checked="checked"'; ?> />(0,1,2,3,4,5,6,7,8,9)</td>
    </tr>
    <tr>
      <td><b>Symbols:</b></td>
      <td><input type="checkbox" name="symbols_check" <?php if (isset($_POST["symbols_check"])) echo 'checked="checked"'; ?> />(!,§,$,%,&amp;,=,?,#,*,|)</td>
    </tr>
    <tr>
      <td><b>Length:</b></td>
      <td><input type="text" name="length" value="<?php if (isset($_POST["length"])) echo $_POST["length"]; else echo "10"; ?>" maxlength="3" class="input" /></td>
    </tr>
    <tr>
      <td></td>
      <td><input type="submit" name="submit" value="Generate Password" class="submit" /></td>
    </tr>
<?php
  if (isset($_POST["submit"]) && $error != "")
    {
?>
    <tr>
      <td colspan="2">&nbsp;</td>
    </tr>
    <tr>
      <td colspan="2"><b><?php if ($error != "") echo $error; ?></b></td>
    </tr>
<?php
    }
  elseif (isset($_POST["submit"]))
    {
?>
    <tr>
      <td colspan="2">&nbsp;</td>
    </tr>
    <tr>
      <td><b>Password:</b></td>
      <td><input type="text" name="password" value="<?php echo $password; ?>" readonly="readonly" class="output" /></td>
    </tr>
    <tr>
      <td><b>MD5sum:</b></td>
      <td><input type="text" name="md5sum" value="<?php echo $md5sum; ?>" readonly="readonly" class="output" /></td>
    </tr>
<?php
    }
?>
  </tbody>
</table>
</form>
<div class="footline"><br />&copy; by <a href="http://www.georgkainzbauer.de" target="_blank">Georg Kainzbauer</a></div>
</div>
</center>
</body>
</html>


Dieser Eintrag wurde am 14.10.2006 erstellt und zuletzt am 24.01.2016 bearbeitet.

Direkter Link zu dieser Seite: http://www.gtkdb.de/index_4_569.html

[ Zur Startseite ]   [ Zur Kategorie ]


Valid XHTML 1.0 Transitional Valid CSS Valid Atom 1.0

© 2004-2018 by Georg Kainzbauer