Sichere PHP Verschlüsselung (mit PW)
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
algorithmus
ausgabe
buchstabe
code
datum
definieren
elegante programmierung
idee
internet
kombination
liste
referenz
sicherheit
speichern
test
text
url
verhindern
vorsatz
zahl
-
Hallo LC,
Ich wollte mal fragen ob es eine "Wirklich" sichere Variante in PHP gibt um einen Text mit einen Passwort zu verschlüsseln?
Also md5 is ja "meiner Meinung nach" relativ sicher. Hat halt kein PW um es wieder zu entschlüsseln,
Hat da jemand was für mich? Wäre echt cool.
LG
Christian -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
md5 ist kein stück sicher. hash-tables existieren schon lange. schwerer machen tuts ein anhängsel an das PW, lässt sich aber mit bissel mehr aufwand auch lösen. ich zb hab anfangs mal ne strrot13(md5(sha1($passwort))); gesetzt, aber das ist sehr speicherlastig.
aber apropos verschlüsselung, nen kumpel hat nen super beitrag dazu geschrieben:
http://basti.4ym.org/373
da erklärt er wie du RSA in php nutzt, aber das ist relativ aufwendig, und dementsprechend aufwendig wieder los zu werden
ansonsten schau dir mal die MHash verschlüsselung an. der gehört ein bissel mehr an, aber ist interessant. hier die refferenz:
http://php.net/manual/de/ref.mhash.php
ansonsten kannst du auch den sha1 nehmen, aber der ist irgendwie mitlerweile genau das gleiche, gibt auch hash-tabellen -
Wenn es um die Verschlüsselung eines Textes geht, der natürlich auch wieder lesbar gemacht werden muß, sind MD5 und SHA1 nicht wirklich brauchbar.
Ein sehr sicheres Cryptverfahren wäre z.B. OneTimePad. Damit es wirklich sicher ist, wird allerdings ein Schlüssel benötigt, der die gleiche Länge hat, wie der zu codierende Text.
Zur Nutzung von One-Time-Pad mit php gibt es bei phpclasses.org auch eine einsatzbereite Class: otp
FF -
Uhm, wir brauchen mehr Info. Ein guter Ansatz wäre zu wissen, was du brauchst. Geht es dir nur um einen "sicheren" Hash-Algorithmus (vergiss md5 und sha1 sofort!)? Oder brauchst du witklich Verschlüsselung? Wenn ja, welcher Art? Symmetrisch oder Asymmetrisch? Braucht die Verflüsslung spezielle Eigenschaften (wie Homomorphie)?
-
Du könntest dir eine Methode erfinden wie bei Personalausweis, nur komplizierter...
Buchstabe A könnte die Zahl 524 bedeuten, die B = 604 usw....
die Zahl 1 könnte 740 sein usw.
Kannst ja alles selbst definieren.
Ich fänds sicher, so lang keiner die Kombinationen kennt. -
macromedia schrieb:
Du könntest dir eine Methode erfinden wie bei Personalausweis, nur komplizierter...
Buchstabe A könnte die Zahl 524 bedeuten, die B = 604 usw....
die Zahl 1 könnte 740 sein usw.
Kannst ja alles selbst definieren.
Ich fänds sicher, so lang keiner die Kombinationen kennt.
Das hört sich ziemlich unsicher an. Einmal, aus dem allgemein Vorsatz, dass Security by Obfuscation sinnlos ist. Und aus dem Vorsatz, dass die Sicherheit einer Verschlüsslung nicht davon abhängen darf, ob der Algorithmus bekannt ist.
Aber ganz abgesehen davon: Wenn der vorliegende Text (oder mehrere Texte) lang genug ist, dann ist es recht trivial anhand der Buchstabenverteilung die Verflüsslung umzukehren. Wenn man sieht, dass die Zahl 932 15 Mal vorkommt und andere Zahlen nur maximal drei Mal, dann kann man daraus folgern, dass 932 das e darstellt. -
nikic schrieb:
macromedia schrieb:
Du könntest dir eine Methode erfinden wie bei Personalausweis, nur komplizierter...
Buchstabe A könnte die Zahl 524 bedeuten, die B = 604 usw....
die Zahl 1 könnte 740 sein usw.
Kannst ja alles selbst definieren.
Ich fänds sicher, so lang keiner die Kombinationen kennt.
Das hört sich ziemlich unsicher an. Einmal, aus dem allgemein Vorsatz, dass Security by Obfuscation sinnlos ist. Und aus dem Vorsatz, dass die Sicherheit einer Verschlüsslung nicht davon abhängen darf, ob der Algorithmus bekannt ist.
Aber ganz abgesehen davon: Wenn der vorliegende Text (oder mehrere Texte) lang genug ist, dann ist es recht trivial anhand der Buchstabenverteilung die Verflüsslung umzukehren. Wenn man sieht, dass die Zahl 932 15 Mal vorkommt und andere Zahlen nur maximal drei Mal, dann kann man daraus folgern, dass 932 das e darstellt.
durch eine elegante programmierung könnte der 1. "e" = 27, der 2. "e" = 68, der 3. usw...
möglich ist alles,
im allgemeinen ist sowieso nichts "sicher" im internet ^^ -
Was genau hast du vor? Das würde bei der Ideenfindung helfen ;)
Nur einen Text verschlüsseln?
<?PHP function encrypt($text, $seed) { $encText = ""; $pwLength = strlen($seed); $i=6; for ($x=0; $x < strlen($text); $x++) { $i = ($i%$pwLength)+1; $a = ord(substr($text, $x, 1)); $b = ord(substr($seed, $i-1, 1)); $encText .= ($a ^ $b); $encText .= " "; } return $encText; } function decrypt($text, $seed){ if(!$text == ""){ if (strlen($text) == 1) return "999999"; $pwLength = strlen($seed); $strText = ""; $hold; $i = 6; $crypt = explode(" " ,$text); for ($x = 0; $x < sizeof($crypt) - 1; $x++) { if (strlen($crypt[$x])>2) { $test=0; $test = (int) $crypt[$x]; if ($test == 0) $crypt[$x] = substr($crypt[$x], 1,1); } $i = ($i % $pwLength) + 1; $a = (int)($crypt[$x]); $b = ord(substr($seed, $i-1, 1)); $hold = chr($a ^ $b); $strText .= $hold; } return trim($strText); }else{ return ""; } } $msg = "lima-city ist toll!"; // Zu verschlüsselnder Text $seed = "bgTCIQkq"; // "Geheimcode" //echo encrypt($msg, $seed); // verschlüsselte Ausgabe //echo decrypt($encrypted, $seed); // entschlüsselte Ausgabe ?>
Beitrag zuletzt geändert: 23.11.2010 21:59:15 von fabo -
macromedia schrieb:
durch eine elegante programmierung könnte der 1. "e" = 27, der 2. "e" = 68, der 3. usw...
möglich ist alles,
Das würde aber verdammt Speicheraufwändig sein. Man müsste eine Liste speichern mit all diesen Zuweisungen. Stell dir vor in dem Text sind 500 'e's. Und noch viele andere Buchstaben...
im allgemeinen ist sowieso nichts "sicher" im internet ^^
Referenz? Eine asymmetrische Verschlüsslung mit Zertifizierung, um Man-in-the-Middle-Attacks zu verhindern wird noch als durchaus sicher angesehen. Sie ist gut geeignet, um auch über das Internet verschlüsselte Daten auszutauschen.
@fabo: Welchen Algorithmus benutzt du?
Beitrag zuletzt geändert: 23.11.2010 22:05:48 von nikic -
@fabo: Welchen Algorithmus benutzt du?
Im Bezug auf was? Ich hab nichts zu verheimlichen ;) -
fabo schrieb: Was genau hast du vor? Das würde bei der Ideenfindung helfen ;)
Nur einen Text verschlüsseln?
<?PHP function encrypt($text, $seed) { $encText = ""; $pwLength = strlen($seed); $i=6; for ($x=0; $x < strlen($text); $x++) { $i = ($i%$pwLength)+1; $a = ord(substr($text, $x, 1)); $b = ord(substr($seed, $i-1, 1)); $encText .= ($a ^ $b); $encText .= " "; } return $encText; } function decrypt($text, $seed){ if(!$text == ""){ if (strlen($text) == 1) return "999999"; $pwLength = strlen($seed); $strText = ""; $hold; $i = 6; $crypt = explode(" " ,$text); for ($x = 0; $x < sizeof($crypt) - 1; $x++) { if (strlen($crypt[$x])>2) { $test=0; $test = (int) $crypt[$x]; if ($test == 0) $crypt[$x] = substr($crypt[$x], 1,1); } $i = ($i % $pwLength) + 1; $a = (int)($crypt[$x]); $b = ord(substr($seed, $i-1, 1)); $hold = chr($a ^ $b); $strText .= $hold; } return trim($strText); }else{ return ""; } } $msg = "lima-city ist toll!"; // Zu verschlüsselnder Text $seed = "bgTCIQkq"; // "Geheimcode" //echo encrypt($msg, $seed); // verschlüsselte Ausgabe //echo decrypt($encrypted, $seed); // entschlüsselte Ausgabe ?>
Ich will die Nachrichten die User schreiben verschlüsselt in meine DB speichern.
DANKE AN ALLE BISHER! -
Dann machs so, wie von mir beschrieben. Einfach und dennoch nicht unsicher. Zumindest nicht wirklich ;)
-
@fabo: Ich meine, wie heißt der Algorithmus, den du in dem Codeschnippsel benutzt?
-
Du kannst dir auch mal mcypt ansehen
Damit kann man mit einen String mit einem gegebenen Passwort verschlüsseln, es stehen verschiedene Algorithmen zur verfügung.
Beitrag zuletzt geändert: 24.11.2010 18:30:12 von thomasba -
nikic schrieb:
@fabo: Ich meine, wie heißt der Algorithmus, den du in dem Codeschnippsel benutzt?
Ist nicht von mir. Ist von einem bestehenden Java Algorithmus in PHP portiert worden. -
nikic schrieb:
macromedia schrieb:
durch eine elegante programmierung könnte der 1. "e" = 27, der 2. "e" = 68, der 3. usw...
möglich ist alles,
Das würde aber verdammt Speicheraufwändig sein. Man müsste eine Liste speichern mit all diesen Zuweisungen. Stell dir vor in dem Text sind 500 'e's. Und noch viele andere Buchstaben...
im allgemeinen ist sowieso nichts "sicher" im internet ^^
Referenz? Eine asymmetrische Verschlüsslung mit Zertifizierung, um Man-in-the-Middle-Attacks zu verhindern wird noch als durchaus sicher angesehen. Sie ist gut geeignet, um auch über das Internet verschlüsselte Daten auszutauschen.
@fabo: Welchen Algorithmus benutzt du?
im Groben und ganzen,
egal wie stark und kompliziert etwas verschlüsselt wird, es gibt immer eine möglichkeit es zu entschlüsseln.
ist doch egal ob es speicheraufwendig ist, so eine liste wäre net einmal 20mb, das passt auf jeden webspace.
ich selber, würde meine idee nicht anwenden, da ich zu faul bin so etwas zu programmieren.
ich greife eher auf md5, ansonsten wenns so privat ist, lass ich es gleich auf meinem PC ^^ -
im Groben und ganzen,
egal wie stark und kompliziert etwas verschlüsselt wird, es gibt immer eine möglichkeit es zu entschlüsseln.
Selbe Antwort wie vorher: Referenz? Wenn man einhundert Quadrilliarden Jahre bräuchte, um ein Text zu entschlüsseln, wird angenommen, dass die Verschlüsslung (für den Zeitpunkt zumindest) sicher ist. Es ist also nicht so, dass man alles schon irgendwie entschlüsseln kann - man kann nämlich nicht!
ist doch egal ob es speicheraufwendig ist, so eine liste wäre net einmal 20mb, das passt auf jeden webspace.
Das ist absolut nicht egal. Wenn ich einen Text mit 128 Byte länge verschlüssle und da kommen dann zwei Gigabyte Daten raus ... das würde keiner benutzen.
Beitrag zuletzt geändert: 29.11.2010 20:07:49 von nikic -
nikic schrieb:
macromedia schrieb:
nikic schrieb:
macromedia schrieb:
durch eine elegante programmierung könnte der 1. "e" = 27, der 2. "e" = 68, der 3. usw...
möglich ist alles,
Das würde aber verdammt Speicheraufwändig sein. Man müsste eine Liste speichern mit all diesen Zuweisungen. Stell dir vor in dem Text sind 500 'e's. Und noch viele andere Buchstaben...
im allgemeinen ist sowieso nichts "sicher" im internet ^^
Referenz? Eine asymmetrische Verschlüsslung mit Zertifizierung, um Man-in-the-Middle-Attacks zu verhindern wird noch als durchaus sicher angesehen. Sie ist gut geeignet, um auch über das Internet verschlüsselte Daten auszutauschen.
@fabo: Welchen Algorithmus benutzt du?
im Groben und ganzen,
egal wie stark und kompliziert etwas verschlüsselt wird, es gibt immer eine möglichkeit es zu entschlüsseln.
Selbe Antwort wie vorher: Referenz? Wenn man einhundert Quadrilliarden Jahre bräuchte, um ein Text zu entschlüsseln, wird angenommen, dass die Verschlüsslung (für den Zeitpunkt zumindest) sicher ist. Es ist also nicht so, dass man alles schon irgendwie entschlüsseln kann - man kann nämlich nicht!
ist doch egal ob es speicheraufwendig ist, so eine liste wäre net einmal 20mb, das passt auf jeden webspace.
Das ist absolut nicht egal. Wenn ich einen Text mit 128 Byte länge verschlüssle und da kommen dann zwei Gigabyte Daten raus ... das würde keiner benutzen.
Das wären ja millionen von Zeilen...
3 verschiedene Codes je Buchstabe reichen, da kommt man net einmal über 10mb am Schluss.
Ansonsten wenn du etwas sehr gut verschlüsseln willst, greif auf das HTTPS zu. -
Mal ne andere Idee wie wäre es wenn du den Sourcecode kryptographisch verschlüsselst. Denn das ist eigentlich nicht knackbar. Wär mal was anderes. Somit würdest du deine Seite ziemlich angriffs sicher bekommen. Wünsche viel Spass beim schreiben ^^.
Regards -
djspamjagger schrieb:
Mal ne andere Idee wie wäre es wenn du den Sourcecode kryptographisch verschlüsselst. Denn das ist eigentlich nicht knackbar. Wär mal was anderes. Somit würdest du deine Seite ziemlich angriffs sicher bekommen. Wünsche viel Spass beim schreiben ^^.
Regards
Kanst du vergessen. Es gibt keine Möglichkeit, den Sourcecode sicher zu verschlüsseln oder zu kompilieren. Weder mit Zend, noch mit Ioncube und/oder Sourceguardian und erst Recht nicht mit den ganzen Opensource Acceleratoren. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage