Registrierung Passwort verschlüsseln.
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
algorithmus
berechnen
berechnung
code
http
hund
laufen
laufzeit
login
match
nehmen
not
nutzen
problem
rechenzeit
schritt
summen
tabelle
url
wissen
-
Hallo,
Ich hab ein Problem ich möchte das Passwort verschlüsseln können ihr mir sagen wie man sowas macht.
<!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> <title>Registration Complete</title> </head> <body> <?php include('cn.php'); $userUsername = $_POST['userUsername']; $userPassword = $_POST['userPassword']; $userPasswordConfirm = $_POST['userPasswordConfirm']; $userAge = $_POST['userAge']; $userCountry = $_POST['userCountry']; // Prevent MySQL Injections $userUsername = mysql_real_escape_string(stripslashes($userUsername)); $userPassword = mysql_real_escape_string(stripslashes ($userPassword)); $userPasswordConfirm = mysql_real_escape_string(stripslashes ($userPasswordConfirm)); $userAge = mysql_real_escape_string(stripslashes($userAge)); $userCountry = mysql_real_escape_string(stripslashes($userCountry)); $sql = "SELECT * FROM user"; $resultCount = mysql_query($sql, $cn) or die(mysql_error($cn)); $num_users = mysql_num_rows($resultCount); $row_count = -1; while ($row_count < $num_users) { $data = mysql_fetch_object($resultCount); $row_count++; if ($data->user_username == $userUsername) { echo '<p>The username "' . $userUsername . '" is not available.</p>'; $row_count = $num_users; } else if ($row_count == $num_users) { echo '<p>The username "' . $userUsername . '" has been selected.</p>'; if ($userPassword != $userPasswordConfirm) { echo '<p>Passwords do not match.</p>'; echo '<p><strong>New user has not been created.</strong></p>'; } else { echo '<p>Passwords match.</p>'; $userJoinDate = time(); $sql = "INSERT INTO user (user_username, user_password, user_join_date, user_age, user_country) VALUES ('" . $userUsername . "', '" . $userPassword . "', '" . $userJoinDate . "', '" . $userAge . "', '" . $userCountry . "')"; $result = mysql_query($sql, $cn) or die(mysql_error($cn)); echo "<p><strong>The username '" . $userUsername . "' has been created. Please login <a href='login.php'>here</a>.</strong></p>"; } } } ?> </body> </html>
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Die meistgenutzte Methode werden wohl MD5-Summen sein (habe aber nicht wirklich einen Überblick darüber). Einfach die Summe vom Passwort berechnen und speichern. Die Summen sind nicht rückrechenbar, aber trotzdem nicht unknackbar. Deswegen nimmt man auch gerne mal einen salted hash (googlen!).
Natürlich könntest du auch einfach deine eigene Methode entwickeln oder eine andere nutzen um die Summen zu berechnen. Musst du am Ende wissen, was du nutzen willst. -
wo das so richtig.
Könnt ihr mir bitte helfen.
<!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> <title>Registration Complete</title> </head> <body> <?php include('cn.php'); $userUsername = $_POST['userUsername']; $userPassword = md5($_POST['userPassword']); $userPasswordConfirm = md5($_POST['userPasswordConfirm']); $userAge = $_POST['userAge']; $userCountry = $_POST['userCountry']; // Prevent MySQL Injections $userUsername = mysql_real_escape_string(stripslashes($userUsername)); $userPassword = mysql_real_escape_string(stripslashes ($userPassword)); $userPasswordConfirm = mysql_real_escape_string(stripslashes ($userPasswordConfirm)); $userAge = mysql_real_escape_string(stripslashes($userAge)); $userCountry = mysql_real_escape_string(stripslashes($userCountry)); $sql = "SELECT * FROM user"; $resultCount = mysql_query($sql, $cn) or die(mysql_error($cn)); $num_users = mysql_num_rows($resultCount); $row_count = -1; while ($row_count < $num_users) { $data = mysql_fetch_object($resultCount); $row_count++; if ($data->user_username == $userUsername) { echo '<p>The username "' . $userUsername . '" is not available.</p>'; $row_count = $num_users; } else if ($row_count == $num_users) { echo '<p>The username "' . $userUsername . '" has been selected.</p>'; if ($userPassword != $userPasswordConfirm) { echo '<p>Passwords do not match.</p>'; echo '<p><strong>New user has not been created.</strong></p>'; } else { echo '<p>Passwords match.</p>'; $userJoinDate = time(); $sql = "INSERT INTO user (user_username, user_password, user_join_date, user_age, user_country) VALUES ('" . $userUsername . "', '" . $userPassword . "', '" . $userJoinDate . "', '" . $userAge . "', '" . $userCountry . "')"; $result = mysql_query($sql, $cn) or die(mysql_error($cn)); echo "<p><strong>The username '" . $userUsername . "' has been created. Please login <a href='login.php'>here</a>.</strong></p>"; } } } ?> </body> </html>
-
Fertigen Code wirst du hier wohl weniger bekommen, das hilft dir nicht. Lies dich in das Thema ein, es gibt genug auf Google zu finden und implementiere es selber. Außerdem habe ich oben doch eh schon geschrieben, wo das gemacht werden muss. ;)
-
Man könnte allerdings auch AES nehmen Ist einwenig aufwendig, doch man braucht lange um es wieder entschlüsseln zu können. Einfach mal in Google "AES PHP" suchen.
-
arme junge! du bist hier 'gut' versorgt :)
also es geht in etwa so (du musst dir eigens irgendein algo ausdenken!):<?php $pw0 = 'hund'; $salt = 'lorem ipsum dolor sit amet'; $pw1 = sha1(sha1($salt . sha1($pw0))); // hash-algo exit('blödespasswort ("hund") etwas besser verschlüsselt: ' . $pw1. '<hr />mein hash-algo: <pre>$pw1 = sha1(sha1("salt" . sha1("password")));</pre>' . '<hr />blödespasswort blöd verschlüsselt (md5): ' . md5($pw0) . '<hr />blödespasswort etwas besser verschlüsselt <a href="https://www.google.at/search?as_q=01b3f59481d46ded6e6e4be8252d6bf1&as_epq=&as_oq=&as_eq=&as_nlo=&as_nhi=&lr=&cr=&as_qdr=all&as_sitesearch=&as_occt=any&safe=images&tbs=&as_filetype=&as_rights=#lr=&as_qdr=all&q=70058550bf899147eddba8c32a7a7488b5cf8939&oq=70058550bf899147eddba8c32a7a7488b5cf8939&gs_l=serp.3...2385.2385.0.2745.1.1.0.0.0.0.150.150.0j1.1.0....0...1c.1.23.serp..1.0.0.y7eRt5e5dxk&bav=on.2,or.&fp=23271df1e61efdb7&biw=1276&bih=853">finden!</a>' . '<hr />blödespasswort blöd verschlüsselt <a href="https://www.google.at/search?as_q=01b3f59481d46ded6e6e4be8252d6bf1&as_epq=&as_oq=&as_eq=&as_nlo=&as_nhi=&lr=&cr=&as_qdr=all&as_sitesearch=&as_occt=any&safe=images&tbs=&as_filetype=&as_rights=#lr=&as_qdr=all&q=06e2b745f3124f7d670f78eabaa94809&oq=06e2b745f3124f7d670f78eabaa94809&gs_l=serp.12...0.0.0.395998.0.0.0.0.0.0.0.0..0.0....0...1c..23.serp..0.0.0.lB5RTrRKEzw&bav=on.2,or.&bvm=bv.49967636,d.Yms&fp=23271df1e61efdb7&biw=1276&bih=853">finden!</a>' );
und hier kanns das ergebnis angucken. -
taos schrieb:
Warum soll man Passwörter mit AES verschlüsseln wollen? Schließlich ist AES ein symmetrisches Verschlüsselungsverfahren. Passwörter hingegen sollen gar nicht mehr »entschlüsselt« werden können, so wie es bei Hashalgorithmen der Fall ist.
Man könnte allerdings auch AES nehmen
Mittlerweile hört und liest man des öfteren, dass bcrypt eingesetzt werden sollte (statt sha / md5).
Was czibere mit dem Salt vorgeschlagen hat (ohne es zu erklären) solltest du sowieso anwenden.
Wird ein Passwort gehasht ist es zwar nicht möglich aus dem Hash das Passwort zu »berechnen«, das bedeutet aber nicht, dass das Passwort sicher ist. Es gibt Tabellen, in denen alle möglichen und unmöglichen Zeichenketten sowie der daraus resultierende Hash eingetragen sind. Sucht man das Klartextpasswort eines Hashes, so muss man nur in der Tabelle nachschauen. Das funktioniert allerdings nur dann, wenn kein Salt eingesetzt wird. Bei einem Salt wird an das eigentliche Passwort der Salt angehängt / vorangestellt / was auch immer. Damit wird aus
in cziberes Beispielhund
Erst diese Zeichenkette wird durch sha1 geschickt und in der Datenbank landet nur noch1. Schritt: lorem ipsum dolor sit ametdea3e0200ce8afadd6cd4c00533b76c991be5e14 2. Schritt: 64a375dc746dadcb38f13b1e6a615c195aa54953
.70058550bf899147eddba8c32a7a7488b5cf8939
Wenn nun jemand in Besitz dieses Strings kommt kann er zwar in Tabellen nachsehen, wird aber feststellen müssen, dass normalerweise solch lange Strings nicht in Tabellen enthalten sind. Dies macht Tabellen zum Knacken der Passwörter unbrauchbar, da sie extra für diesen Salt aufgebaut werden müssten, was sehr viel Zeit in Anspruch nimmt.
Und warum dann bcrypt?
Hashfunktionen sind nur dann gut, wenn sie langsam zu berechnen sind. Sind sie schnell berechenbar lassen sich sehr schnell sehr viele Möglichkeiten durchprobieren und das Passwort kann schnell gefunden werden. Mittlerweile gibt es zu schnelle Rechner, sodass selbst SHA nicht mehr richtig sicher ist. bcrypt ist ein Algorithmus, der sehr komplex ist und deshalb viel Rechenzeit benötigt. Dadurch ist ein Brute-Force-Angriff praktisch unmöglich, da nur wenige Möglichkeiten schon viel Zeit zur Berechnung benötigen. -
fuerderer schrieb:
Wie lange darf eine Berechnung bei Lima-City denn dauern? (Fairness)[/quote]
bcrypt ist ein Algorithmus, der sehr komplex ist und deshalb viel Rechenzeit benötigt.
Das ist recht einfach:
system.lima-city.de/info.php
max_execution_time ist auf 30 Sekunden gesetzt, länger läuft ein PHP-Skript ohnehin nicht.
Solltest du natürlich den ganzen Tag nichts anderes zu tun haben, und das Skript eine ums andere Mal ausführen, und das am besten 5x gleichzeitig, was ja technisch kein Problem darstellt, dann wäre das allerdings ein Verstoß gegen die FairUse-Klausel.
Hast du denn überhaupt schon ein ähnliches Skript laufen lassen, und die Laufzeit mitgemessen, um einen realistischen Anhaltspunkt zu wissen, wie lange ein solches Skript laufen würde?
Es hat ja keinen Sinn, die Laufzeit eiens Skripts auf eine erlaubte Laufzeit hin zu trimmen, sondern erstmal festzustellen, wie lange die notwendigen Berechnungen dauern würden -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage