submain Geschrieben 7. September 2014 Geschrieben 7. September 2014 Hallo an die PHP-Checker...!!! Ich habe als Hausarbeit ein PW-Manager als PHP-Script erstellt. Es gibt 2 Eingabefelder mit unbegrenzter Wort-/Satzlänge und als Ausgabe kommt ein verschlüsselter Wert. Die Verschlüsselung besteht aus sha1, md5 & crypt... Naja, das könnt ihr unten im aufgeführten PHP-Code ja selber lesen. Das ist soweit auch alles korrekt. Dieses Script ist mit xampp oder ähnlichem Server-Tools ausführbar, wie man es ja von php gewohnt ist. Soweit so gut... Mein Anliegen ist jetzt, das ich gern dieses php-Script umwandeln möchte, so das es nur noch über eine Webseite ohne Server gestartet werden kann. Ein ausführbares GUI (Programm-Oberfläche) wäre sogar noch besser. Ich möchte aber keine gutgemeinten Ratschläge wie, das geht in Java oder C/C++ oder whatever. Da ich so eine Umwandlung noch nicht gemacht habe, wäre ich euch sehr dankbar wenn mir da jemand weiterhelfen könnte. Man müsste doch theoretisch nur paar wenige Codes umändern, oder täusch ich mich da...? Ich hab es nach 3 Stunden probieren leider nicht hinbekommen. Hier das PHP-Script: <?php echo " <form action='crypto_gen.php' method='POST'> Dein Geheimnis: <input type='text' name='geheimnis'> Dienstname: <input type='text' name='dienst'> <input type='submit' name='snd'> </form><br><br>"; if (isset($_POST['snd'])) { $hash_passwd = sha1($_POST['geheimnis']); $hash_dienst = md5($_POST['dienst']); $beide = crypt($hash_passwd, '$6$rounds=9123$' . $hash_dienst); echo substr($beide,strlen($beide)-15); } ?>[/PHP] Achso, falls es Unklarheiten gibt, wegen meinem Verschlüsselungsalgoritmus, der ist so gewollt... Vielen Dank schonmal.... Zitieren
Klotzkopp Geschrieben 7. September 2014 Geschrieben 7. September 2014 Mein Anliegen ist jetzt, das ich gern dieses php-Script umwandeln möchte, so das es nur noch über eine Webseite ohne Server gestartet werden kann. Ein ausführbares GUI (Programm-Oberfläche) wäre sogar noch besser.Weißt du denn, wie man PHP-Code lokal, ohne Webserver ausführt? Man müsste doch theoretisch nur paar wenige Codes umändern, oder täusch ich mich da...?Naja, das ganze HTML-Zeug muss natürlich weg, statt dessen musst du deine Eingabedaten aus der Konsole oder GUI lesen. Achso, falls es Unklarheiten gibt, wegen meinem VerschlüsselungsalgoritmusMag sein, dass du das für korrekt und gewollt hältst. Aber das ist kein Verschlüsselungsalgorithmus. Zitieren
submain Geschrieben 7. September 2014 Autor Geschrieben 7. September 2014 Weißt du denn, wie man PHP-Code lokal, ohne Webserver ausführt? Nein... Sonst hätte ich es ja selbst hinbekommen. Naja, das ganze HTML-Zeug muss natürlich weg, statt dessen musst du deine Eingabedaten aus der Konsole oder GUI lesen. Die HTML-Tags hab ich benutzt, damit das Script im Browser ordentlich dargestellt wird... Können natürlich entfernt werden. Ich kenn aber die Befehle für Eingabefeld und Submit-Button für eine andere Sprache nicht. Ich lerne Systemintegration, nicht Anwendungsentwicklung. Und Programmierung ham wir nur paar Wochen gehabt. Du meinst mit Eingabedaten aus Konsole/GUI bestimmt Print und Integer, oder versteh ich das falsch. Mag sein, dass du das für korrekt und gewollt hältst. Aber das ist kein Verschlüsselungsalgorithmus. Hast du diesen bei dir ausprobiert? Aus beiden Eingabefeldern wird der Wert jeweils in sha1 & md5 verschlüsselt =>Das Ergebnis wird in Crypt verschlüsselt => Die Ausgabe des Wertes erfolgt nach 9123 Durchgängen + ab der 15. Stelle. Wenn am Code nix geändert wird, ist bei jeder selben Eingabe der beiden Felder immer der gleiche verschlüsselte Wert. Was ist daran falsch? Zitieren
Klotzkopp Geschrieben 8. September 2014 Geschrieben 8. September 2014 NDie HTML-Tags hab ich benutzt, damit das Script im Browser ordentlich dargestellt wird..Ohne Beteiligung eines Webservers ist es sinnlos, da einen Browser einzubeziehen. Ich kenn aber die Befehle für Eingabefeld und Submit-Button für eine andere Sprache nicht. Dann mach es eben erst einmal über die Konsole. Du meinst mit Eingabedaten aus Konsole/GUI bestimmt Print und Integer, oder versteh ich das falsch.Print ist Ausgabe. Konsoleneingabe bei PHP funktioniert über fscanf auf STDIN, soweit ich weiß. Hast du diesen bei dir ausprobiert?Nein, das kann man dem Code ansehen. Aus beiden Eingabefeldern wird der Wert jeweils in sha1 & md5 verschlüsselt =>Das Ergebnis wird in Crypt verschlüsselt => Die Ausgabe des Wertes erfolgt nach 9123 Durchgängen + ab der 15. Stelle. Wenn am Code nix geändert wird, ist bei jeder selben Eingabe der beiden Felder immer der gleiche verschlüsselte Wert. Was ist daran falsch?Eine wichtige Eigenschaft einer Verschlüsselung ist, dass man sie umkehren kann. Was du da machst, ist nicht umkehrbar. Auch SHA1 und MD5 sind keine Verschlüsselungen, aus genau demselben Grund: Weil du den Klartext nicht wiederherstellen kann. Ein Password-Manager, aus dem man die Passwörter nicht wieder herausholen kann, klingt für mich ziemlich kaputt. Zitieren
submain Geschrieben 8. September 2014 Autor Geschrieben 8. September 2014 Nein, das kann man dem Code ansehen. Eine wichtige Eigenschaft einer Verschlüsselung ist, dass man sie umkehren kann. Was du da machst, ist nicht umkehrbar. Auch SHA1 und MD5 sind keine Verschlüsselungen, aus genau demselben Grund: Weil du den Klartext nicht wiederherstellen kann. Ein Password-Manager, aus dem man die Passwörter nicht wieder herausholen kann, klingt für mich ziemlich kaputt. PW-Manager ist von mir falsch ausgedrückt. Das soll natürlich ein PW-Generator darstellen, wie man erkennt. Ein PW-Manager bzw. Safe ist nur so lange sicher, wie niemand außer der Besitzer den Zugang zum Safe bekommt. Der Nachteil an einer umkehrbaren Verschlüsselung ist, das der Code "auslesbar" ist. Und genau hier setzt mein Generator an. Das PW ist NICHT in umgekehrter Richtung wiederherstellbar. Man merkt sich nur das eigene, persönliche Wort oder Satz und den entsprechenden Dienst. Für jede Anmeldung müssen die beiden Felder damit gefüllt werden und schon bekommt man das Kennwort. Das ist quasi ein PW-Merker ohne das die PW´s irgendwo abgelegt werden. Hier ist natürlich auch die Voraussetzung das man die Begriffe für die Felder nicht vergisst oder jemand anderem zugänglich macht. Aber da nützt auch der beste Safe nichts... Zitieren
Klotzkopp Geschrieben 8. September 2014 Geschrieben 8. September 2014 Ein PW-Manager bzw. Safe ist nur so lange sicher, wie niemand außer der Besitzer den Zugang zum Safe bekommt.Was meinst du denn mit Zugang? Bei einem guten Passwortmanager ist weder Kenntnis des Algorithmus noch der Zugriff auf die verschlüsselten Daten ein Problem. Der Nachteil an einer umkehrbaren Verschlüsselung ist, das der Code "auslesbar" ist.Alle Verschlüsselungen sind umkehrbar. Du benutzt den Begriff "Verschlüsselung" falsch. In deinem Programm ist nirgendwo eine Verschlüsselung. Du verknüpfst mehrere Hash-Funktionen. Das ist quasi ein PW-Merker ohne das die PW´s irgendwo abgelegt werden.Und wo ist die zusätzliche Sicherheit? Statt den Dienst selbst mit Passwortlisten zu füttern, füttere ich eben dein Programm mit diesen Listen. Mit etwas Glück verwendet der Benutzer dasselbe Geheimnis für mehrere Dienste, dann gute Nacht. Zitieren
submain Geschrieben 8. September 2014 Autor Geschrieben 8. September 2014 Kein Schutz bietet 100%ige Sicherheit. Die Warscheinlichkeit das jemand dasselbe Wort/Satz für den Generator verwendet, ist genauso hoch, wie wenn jemand deine PW´s (die aus einfachen Worten bestehen) rausbekommt, die du dir nur im Kopf merkst. Nennen wir es kryptologischer Zufallsgenerator... Ist ja auch nur ein Übungsscript, wo mehrere Hash-Funktionen einen kryptographischen Endwert ergeben sollen... mehr nicht Ma zurück zum eigentlichen Thema... Kann mir evtl. jemand bitte den abgewandelten Code für eine Konsolenausgabe zur Verfügung stellen...? Zitieren
uenetz Geschrieben 8. September 2014 Geschrieben 8. September 2014 Hallo an die PHP-Checker...!!! Man müsste doch theoretisch nur paar wenige Codes umändern, oder täusch ich mich da...? Ich hab es nach 3 Stunden probieren leider nicht hinbekommen. Ohne Dein Vorhaben bewerten zu wollen: Dann versuche Dich einfach weiter. Eventuell erkennst Du dann auch einen Unterschied zwischen PHP-Scripting und Programmierung in Java/C/C++ Zitieren
submain Geschrieben 8. September 2014 Autor Geschrieben 8. September 2014 Den Unterschied kenn ich... Ich werde das ganze mal in Java umwandeln. Das ist, glaub ich, der Code der dem PHP am nähesten kommt. Am Ende ist es dann doch besser, wenn ich das selber mach. So kann ich mich wenigstens mal damit auseinandersetzen, wie man generell eine Code-Sprache in eine andere umwandelt oder anpasst. Zitieren
Crash2001 Geschrieben 9. September 2014 Geschrieben 9. September 2014 Kein Schutz bietet 100%ige Sicherheit. Die Warscheinlichkeit das jemand dasselbe Wort/Satz für den Generator verwendet, ist genauso hoch, wie wenn jemand deine PW´s (die aus einfachen Worten bestehen) rausbekommt, die du dir nur im Kopf merkst.[...]Sehe ich anders, wenn nicht explizit bestimmte Kennwortrichtlinien implementiert sind, so dass man ein Kennwort z.B. nicht doppelt verwenden kann und man z.B. mindestens 8 Zeichen, davon mind 1 Großbuchstabe, 1 Ziffer und ein Sonderzeichen enthalten und sich von den anderen Passwörtern an mindestens x Stellen unterscheiden muss (gegen z.B. fortlaufende Nummern/Buchstabenreihen). Bei Zugängen hat man oftmals bestimmte Komplexitätsvorgaben und kann z.B. die letzten 10 PAsswörter nicht nutzen, die man vorher schon mal verwendet hat. Zitieren
submain Geschrieben 9. September 2014 Autor Geschrieben 9. September 2014 Spätestens beim Social-Hacking ist die Methode auch nicht 100%ig sicher. Bei solchen Kennwortrichtlinien braucht man entweder ein verdammt gutes Gedächtnis um sich die PW´s zu merken oder man schreibt sie wo auf oder speichert die in nem Safe/Manager-Tool oder verschlüsselt auf der HDD. Gedächtnis is natürlich die wohl sicherste Methode. Aber die anderen beiden zeigen ja, das keine 100%ige Sicherheit garantiert werden kann, sobald die Kennwörter irgendwo gespeichert oder geschrieben sind. Die Sicherheit ergibt sich eher dadurch, wieviel Mühe und Zeit es überhaupt wert ist an die PW´s zu kommen. Bei den meisten Nutzern, sicherlich völlig unangemessen. Aber bei hochprisanten Daten ist der Aufwand zum PW-Klau teilweise schon gegeben. Ist meine persönliche Meinung... Zitieren
lilith2k3 Geschrieben 9. September 2014 Geschrieben 9. September 2014 Versuch's mal damit: How do you use bcrypt for hashing passwords in PHP? - Stack Overflow Zitieren
submain Geschrieben 10. September 2014 Autor Geschrieben 10. September 2014 Sehr schöne Seite;)... Kannte ich noch gar nicht. Ist gleich in meinen Favs gekommen... Vielen Dank Zitieren
pr0gg3r Geschrieben 11. September 2014 Geschrieben 11. September 2014 Ich möchte aber keine gutgemeinten Ratschläge wie, das geht in Java oder C/C++ oder whatever. [...] wäre ich euch sehr dankbar wenn mir da jemand weiterhelfen könnte. Zuerst einmal suchst du dir eine Programmiersprache heraus, für die es eine GUI gibt und die dir gefällt bzw. die du aus anderen Gründen noch lernen möchtest. Zum Beispiel Java (Swing), C++ (WinAPI, Qt, GTK, ...), C# oder VB.NET (Winforms, WPF, ...). Dann erstellst du einfach deine GUI (entweder mit einem Modeller/Desigenr/GUI-Builder oder eben "per Hand" also per Code). Brauchst ja nur zwei Eingabefelder, ein Button und noch ein Ausgabefeld. Dann suchst du dir für die gewählte Programmiersprache noch ein zwei Libs, Klassen, Whatever aus, welche dir die sha1 und md5 zur Verfügung stellen und bindest diese ein. Die crypt()-Funktion von PHP ist glaube ich Betriebssystemabhängig, da suchste dir eben noch was schönes aus. Anschließend noch dem Button die entsprechende Aktion geben und dort deine Daten einwegverschlüsseln und bei deinem Ausgabefeld anzeigen. Fertig. Bei konkreten(!) Problemen dabei helfe ich gerne weiter. Aber eine Sprache lernen musst du selber. Zitieren
submain Geschrieben 11. September 2014 Autor Geschrieben 11. September 2014 (bearbeitet) Einen neuen Code in einer anderen Sprache wollt ich ja nicht. Sondern den vorhandenen PHP-Code so umcodieren das der ohne ohne Netz-/Serververbindung läuft. Ich wollte mir so einen komplett neuen Code ersparen... Weißt du denn, wie man PHP-Code lokal, ohne Webserver ausführt? Auf diese Frage hin, hätt ich vermutet das das möglich ist. Hätte ich mal einen viel längeren PHP-Code, den ich aber auch "Offline" anwenden möchte, wäre es gut gewesen wenn das einfach gegangen wäre. Aber dem ist ja leider nicht so... Ich hab diese Crypt-Varianten genommen, weil das letzte Woche unser Thema war. Nach Internetrechersche und einigen Aussagen hier, würde ich jetzt bei einer GUI-Version nach besseren Alternativen suchen. Aber trotzdem danke... Mein Praktikum beginnt nächste Woche, da werd ich sicher mehr Zeit haben, mich mit Programmierung auseinander zu setzen. Da komm ich sicher mal auf dein Angebot zurück. Bearbeitet 11. September 2014 von submain Zitieren
Klotzkopp Geschrieben 12. September 2014 Geschrieben 12. September 2014 Auf diese Frage hin, hätt ich vermutet das das möglich ist. Es ist möglich, aber nicht so einfach, wie du dir das vielleicht vorstellst. Du kannst dich auch nicht mit Lenkrad und Stuhl auf die Straße setzen und hoffen, dass du ohne ein Auto ans Ziel kommst, wenn du nur etwas andere Lenkbewegungen machst. Der "natürliche Lebensraum" von PHP-Skripten ist eine ziemlich komplexe und komfortable Laufzeitumgebung aus dem Browser, der die GUI darstellt und die Eingabedaten liefert, und dem Webserver, der sich um die Ausführung kümmert. PHP-Skripte sind natürlich auf diese Laufzeitumgebung ausgelegt. Wenn du die Abhängigkeit von dieser Infrastruktur loswerden willst, muss sich dein Programm um alles, was vorher Browser und Webserver erledigt haben, selbst kümmern. Es gibt dann niemanden mehr, der für dich die GUI aus HTML rendert, und niemanden, der dir die Eingabedaten in einem handlichen $_POST liefert. Das geht nicht einfach so mit "umcodieren". Zudem musst du dafür sorgen, dass du entweder direkt ausführbare Dateien aus dem PHP-Code erstellst (mit einem Compiler), oder lokal ein PHP-Interpreter vorhanden ist, der deinen Code ausführt. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.