Confixx Passwort Verschlüsselung

Beim Einloggen wird anhand des Usernamens das verschluesselte Passwort und der Salt aus der DB gelesen.
Mit dem Salt verschluesselst Du das eingegebene Passwort und vergleichst es mit dem Passwort aus der Datenbank.
 
Kannst du mir sagen wie die Funktion ist, mit der ich das 4. bis 12. Zeichen einer Spalte auslesen kann? Weil ich hab die zwar schon mal benutzt, aber ich weiß nicht mehr genau wie die ging, weil dann kann ich ja anhand des Usernames den Salt auslesen, weil der Salt nicht einzeln in der Datenbank steht.
 
Danke, genau den Befehl hab ich gesucht :-D
Ich werde es dann mal Probieren

Edit:
Ich habe jetzt alles reingeproggt und es funktioniert alles super. Danke für deine Hilfe.
Und für alle die auch Probleme mit dem verschlüssel des Confixx Passwortes haben, hier noch mal die Zusammenfassung:

Zunächst müssen die Daten aus der Confixx Datenbank die zu dem eingegebenen Benutzernamen gehören ausgelesen werden:

PHP:
$result = mysql_query("SELECT * FROM kunden WHERE kunde='$_SESSION[Name]'");
$daten = mysql_fetch_array($result);

Mit diesen Informationen muss man den vorhandenen Salt Wert aus der Confixx Datenbank ausgelesen werden. Da dieser im Confixx Passwort drinn steht wird hier die Funktion substr() genommen

PHP:
$salt = substr($daten[longpw], 1, 12);

Die Variable $daten[longpw] beinhaltet dabei Das komplette Passwort welches in der Confixx Datenbank in der Form $1$[8_ZEICHEN_SALT]$[PASSWORT_IN_MD5] vorliegt.
Um daraus den Salt wert zu bekommen fängt man vom 1. Zeichen an substr($daten[longpw], 1, 12) und liest von diesem Zeichen an 12 Zeichen aus substr($daten[longpw], 1, 12). Da man zur verschlüsselung den Salt Hash in der Form $1$[8_ZEICHEN_SALT]$ Benötigt.

Dann muss man das Passwort nur noch mit MD5 in abhängigkeit des Salt wertes verschlüsseln:

PHP:
$pass = crypt($_POST['Password'], $salt);

Und damit bekommt man das Passwort welches zum Confixx Login benötigt. Dieses muss man dann nur noch mit dem Passwort aus der Datenbank vergleichen und man kann sich über ine Protalseite einloggen.

Ich hoffe das ist verständlich.
Gruß GalaxyWarrior
 
Zuletzt bearbeitet:
Hi ich hoffe ich kann zu diesem Thema noch ne Antwort kriegen :)

Ich baue auch ein kleines Portal welches mit den Confixx Passwörter betreten werden soll.

Der $salt Wert passt bei mir. Aber jage ich mein Passwort noch durch
$pass = crypt($password1, $salt);

Passt der HASH auf jeden fall nicht zu dem in der MYSQL Datenbank.

Hier mein Code mit Comments. Vielleicht könnt Ihr ja weiterhelfen.

PHP:
<?php

///// Connect to Database ///////
$dbconnect = @mysql_connect ('localhost', 'user', 'password');
if (!$dbconnect) {
   die ('Kann Datenbank nicht verbinden. : ' . mysql_error());
}
$dbselect = @mysql_select_db ('confixx', $dbconnect);
if (!$dbselect) {
   die ('Kann Datenbank nicht benutzen : ' . mysql_error());
}

$username1 = $_POST["username1"]; //Kommen aus nem Formular
$password1 = $_POST["password1"]; //Kommen aus nem Formular
$result = mysql_query("SELECT * FROM kunden");
while ($row = mysql_fetch_array($result)) {
$kunde = $row["kunde"];
$salt = substr($row[longpw], 1, 12);
$pass = crypt($password1, $salt);

if (($username1 == $kunde) and ($pass == $row[longpw])) {
	$loginrichtig = 1;
	}
}
if ($loginrichtig != 1) {echo "
Falscher Username oder Passwort.
<p>
<a href=\"webiste.html\"><input type=\"submit\" value=\"Zurück\"></a>
";}
if ($loginrichtig == 1) {
echo "
Super alles Richtig.";
}

?>
 
Irgendetwas ist das faul. Denn die mit crypt() verschlüsselte Zeichenkette wird nie mit dem Muster $1$?8_ZEICHEN_SALT?$?PASSWORT_IN_MD5? übereinstimmen. Hier ein einfacher Test, der laut Beschreibung korrekt ist:
PHP:
$longpw = '$1$12345678$'.md5('foobar');
echo crypt('foobar', substr($longpw, 0, 12));
Ich schätze diese verschlüsselte Zeichenkette muss mit dem Wert der „passwort“-Spalten verglichen werden.
PHP:
$loginrichtig = false;
$query = '
	SELECT
	        `longpw`,
	        `passwort`
	  FROM
	        `kunden`
	  WHERE
	        `kunde`    = "'.mysql_real_escape_string($_POST['username1']).'"
	';
if( ($result = mysql_query($query)) && mysql_num_rows($result) ) {
	$row = mysql_fetch_assoc($result);
	if( crypt($_POST['password1'], substr($row['longpw'], 0, 12)) == $row['passwort'] ) {
		$loginrichtig = true;
	}
}
 
Ich probiere auch schon ne weile dmait rum, sämtliche sachen die ich dazu gefunden habe funktionieren aber nicht, kann es sein das das in letzter zeit geändert wurde?

Wenn du es hinkriegst sag bitte mal bescheid
 
Hallo,

so müsste es klappen (basierend auf Gumbos Vorschlag):
PHP:
<?php

$login_richtig = false;

$query = '
    SELECT `longpw`
      FROM `kunden`
     WHERE `kunde` = "'.mysql_real_escape_string($_POST['username']).'"
';

$result = mysql_query($query);

if ($result && mysql_num_rows($result) > 0) {
    $row = mysql_fetch_assoc($result);
    if (crypt($_POST['password'], $row['longpw']) == $row['longpw']) {
        $login_richtig = true;
    }
}

?>

Grüße,
Matthias
 
Zurück