| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |
|

22-06-2009, 12:54
|
|
Maanee9
Registrierter Benutzer
|
|
Registriert seit: Jun 2009
Beiträge: 29
|
|
Anfänger Problem: Verschlüsseln mit Rijndael 256
Hallo erstmal,
Ich habe erst vor ca 4 Wochen begonnen mit PHP ein bisschen zu Programmieren und bin deshalb noch sehr grün hinter den Ohren.
Als Lektüre verwende ich hierfür
Zitat:
|
PHP5 / MYSQL 5 von Matthias und Caroline Kannengieser
|
.
Da ich momentan noch keinerlei Ahnung von Klassen habe, da das erst später im Buch dran kommt und ich das Buch nicht Kreuz und Quer lesen will, habe ich eine Frage bezüglich einer Klasse mit Rijndael Verschlüsselung 256.
(Ich schreib neben den Lesen natürlich immer wieder ein paar Scripts zwecks Übung)
Ich habe mir bereits ein paar Formularseiten gemacht in der ich Daten per POST auf andere Seiten sowie in eine SQL DB überträge.
Da ich z.B. Passwörter aber verschlüsselt Übertragen bzw in der DB ablegen will bin ich per Google auf eine Funktionen/Klasse gestoßen das meine Zwecke erfüllen sollte.
Allerdings weiß ich jetzt nicht ganz wie ich einen Variablen Wert jetzt damit Verschlüssle und Entschlüssle. (PS: Habe es in einer extra Datei und nur per Include eingefügt.)
Hier die Funktionen/Klasse:
PHP-Code:
<?php /////////////////////////////////////////////////// // A Encryption/Decryption CLASS with Rijndael 256 // By Ismet Ozalp // 16.03.2005 // Please Do not remove this header /////////////////////////////////////////////////// class pWord { var $mykey = "MyKey"; function getEncryptedPass($len){ $pass = $this->makeRandomPassword($len); return $this->linencrypt($pass); } function linencrypt($pass) { $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB); //get vector size on ECB mode $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); //Creating the vector $cryptedpass = mcrypt_encrypt (MCRYPT_RIJNDAEL_256, $this->mykey, $pass, MCRYPT_MODE_ECB, $iv); //Encrypting using MCRYPT_RIJNDAEL_256 algorithm return $cryptedpass; }
function lindecrypt($enpass) { $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB); $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); $decryptedpass = mcrypt_decrypt (MCRYPT_RIJNDAEL_256, $this->mykey, $enpass, MCRYPT_MODE_ECB, $iv); //Decrypting... return rtrim($decryptedpass); } function makeRandomPassword($len) { $salt = "ABCDEFGHJKLMNPRSTUVWXYZ0123456789abchefghjkmnpqrstuvwxyz"; srand((double)microtime()*1000000); for($i = 0;$i < $len;$i++) { $num = rand() % 56; $tmp = substr($salt, $num, 1); $pass = $pass . $tmp; } return $pass; } } ?>
Ich bräuchte jetzt einfach nur ne kurze Erklärung wie ich es Verwende, wenn z.B.
$Geheim = "Darf niemand wissen"
ist.
Vielen dank schon mal für eure Hilfe.
Geändert von Maanee9 (22-06-2009 um 15:05 Uhr)
|

22-06-2009, 13:10
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 24.486
|
|
Mal abgesehen vom konkreten Problem:
Passwörter sollte man nicht verschlüsseln - denn dann kann sie auch ein Angreifer, der Zugang zu den Daten enthält, wieder entschlüsseln.
Stattdessen sollte man sie unter Zuhilfenahme eines zufälligen Salt Hashen. Hash-Funktionen liefern einen hinreichend eindeutigen Wert, und haben aber keine "Umkehrfunktion". MD5 wurde lange Zeit dafür benutzt, gilt mit heutiger Rechenpower allerdings als angreifbar - deshalb benutzt man aktuell SHA1 oder noch "stärkere" Hash-Algorithmen.
Zitat:
|
Allerdings weiß ich jetzt nicht ganz wie ich einen Variablen Wert jetzt damit Verschlüssle und Entschlüssle.
|
Gibt's denn keine Dokumentation zu der Klasse?
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
|

22-06-2009, 13:24
|
|
Maanee9
Registrierter Benutzer
|
|
Registriert seit: Jun 2009
Beiträge: 29
|
|
Ok. Das Passwörter allgemein nicht so gespeichert werden sollen hab ich schon gehört. (Will ich ja auch eigentlich noch gar nicht)
Mir gehts jetzt nur darum das ich ein kleines Onlinegame machen will... also nix überagendes oder so.
Es geht nur darum das ich z.B. wenn ich nen Slotautomaten progrmmiere, der z.B. 5 Geldheiten als Guthaben hat, der Spieler damit spielt und verliert das neue Guthaben wieder per verschlüsselten _POST["Guthaben"] übertragen wird.
Nö.. hab leider keinerlei Dokumentation dazu. Da gabs nur die Datei ohne irgendwelche Infos oder sonst was dazu.
Darum wollte ich auch fragen ob jemand weiß, wie ich damit die Werte einer Variable verschlüssle und wieder entschlüssle.
Vll kann mich auch jemand auf ein ähnliches Script hinweisen das diesen Zweck erfüllen würde, falls es mit dem obigen gar nicht funktioniert.
|

22-06-2009, 13:26
|
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 2.328
|
|
Zitat:
Zitat von Maanee9
Ok. Das Passwörter allgemein nicht so gespeichert werden sollen hab ich schon gehört. (Will ich ja auch eigentlich noch gar nicht)
Mir gehts jetzt nur darum das ich ein kleines Onlinegame machen will... also nix überagendes oder so.
Es geht nur darum das ich z.B. wenn ich nen Slotautomaten progrmmiere, der z.B. 5 Geldheiten als Guthaben hat, der Spieler damit spielt und verliert das neue Guthaben wieder per verschlüsselten _POST["Guthaben"] übertragen wird.
|
Und wie willst du es am Client verschlüsseln? Mit Javascript? Lässt sich sehr leicht umgehen. Mit Flash? Lässt sich dekompilieren.
|

22-06-2009, 13:28
|
|
Maanee9
Registrierter Benutzer
|
|
Registriert seit: Jun 2009
Beiträge: 29
|
|
Zitat:
Zitat von h3ll
Und wie willst du es am Client verschlüsseln? Mit Javascript? Lässt sich sehr leicht umgehen. Mit Flash? Lässt sich dekompilieren.
|
Blubb... versteh ich jetzt nicht ganz.
Wieso Client ?
Der Client soll ja nur die Verschlüsselten Werte übertragen... der Rest wird doch nur Serverseitig behandelt.. Oder lieg ich da jetzt falsch.
Geändert von Maanee9 (22-06-2009 um 13:32 Uhr)
|

22-06-2009, 13:36
|
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 2.328
|
|
Von wo wohin willst du die verschlüsselten Werte übertragen? Wenn du die Werte nur am Server verwendest, brauchst du sie nicht verschlüsseln.
|

22-06-2009, 13:42
|
|
Maanee9
Registrierter Benutzer
|
|
Registriert seit: Jun 2009
Beiträge: 29
|
|
Ich zeigs einfach mal anhand meines Glückomats...
http://war-of-races.de/TEST/Zufallszahlen.php
Hier giebt man seine Werte ein und hatt ein gewisses Guthaben.
Man stellt sich ein um wie viel man Spielen kann.. wie viel verschiedene zahlen es geben soll und wie viele Richtig sein müssen.
Dann werden die Felder bei mir mit POST auf sich selber übertragen und in die Funktionen eingesetzt und das Ergebnis ausgegeben.
Das kann man natürlich beliebig wiederholen.
Und genau die Werte sollen jetzt damit verschlüsselt übertragen werden.
|

22-06-2009, 13:46
|
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 2.328
|
|
Aber damit du die Werte beim Client anzeigen kannst, musst du sie auch beim Client wieder enstschlüsseln. Und damit du neue Werte posten kannst, musst die sie am Client wieder auch verschlüsseln. Oder wie hast du dir das vorgestellt? Ansonsten sieht der Benutzer ja nur verschlüsselten Zeichensalat.
|

22-06-2009, 13:56
|
|
Maanee9
Registrierter Benutzer
|
|
Registriert seit: Jun 2009
Beiträge: 29
|
|
Ja.. natürlich soll der Client die Daten entschlüsselt sehen.
Hab mir das mit nem Versteckten und Sichtbaren Textfeld vorgestellt
Also quasi...
$_POST["guthaben"] = entschlüsseln($_POST["guthaben"] )
<TEXTFELD name"guthaben_visible" value "echo $_POST["guthaben"]"> Die Anzeige im Fenster
anschließend wieder verschlüsseln
$_POST["guthaben"] = verschlüsseln($_POST["guthaben"] )
<TEXTFELD name"guthaben" value "echo $_POST["guthaben"]"> Das is dann ein Hidden Textfeld das die Werte anschließend übergeben soll...
Mit der Methode wollt ich das machen. Also quasi ein verschlüsseltes und sichtbare Textfeld.
Mir gings eigentlich jetzt nur darum wie ich die jetzt verschlüssele mit der Klasse, da ich nicht weiß wie ich sie anwende.
Geändert von Maanee9 (22-06-2009 um 13:59 Uhr)
|

22-06-2009, 13:59
|
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 2.328
|
|
Und wieso speicherst du die Werte nicht einfach in der Session, anstatt sie ständig verschlüsselt dem Browser zu schicken, damit er sie wieder an der Server zurück schickt? Ist doch nur ein unnötiger Umweg.
|

22-06-2009, 14:07
|
|
Maanee9
Registrierter Benutzer
|
|
Registriert seit: Jun 2009
Beiträge: 29
|
|
Mit Sessions hab ich mich momentan leider noch nicht beschäftigt.. die kommen bei mir erst demnächst dran und darum weiß ich natürlich jetzt leider nicht wie es mit Session funktioniert.
Mir gehts halt im Prinzip wirklich nur darum Daten nur in Verschlüsselter Form weiter zugeben. Ob mit POST, GET, COOKIE oder Session.
Ich möchte halt einfach nur Funktionen die es möglichst gut verschlüsselen und auch wieder entschlüsselen.
Darum hab ich mir auch die obige Klasse runtergeladen, wobei ich leider nicht weiß wie ich damit die Variblen verschlüssle.
Zusätzlich noch vielen dank für die schnellen Antworten... ich fühl mich nämlich grad wie ne Nervensäge. Kenn mich halt leider noch nicht so aus.
|

22-06-2009, 14:25
|
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 2.328
|
|
Wie auch immer, Verschlüsseln ist hier keine Lösung. Wenn dem Benutzer das Ergebnis des Spiels nicht passt, drückt er auf den Back-Button im Browser und hat wieder die alten Werte im Formular stehen. Dies kann er dann so lange wiederholen, bis er was gewinnt.
|

22-06-2009, 14:39
|
|
jmc
PHP Junior
|
|
Registriert seit: Mar 2006
Beiträge: 868
|
|
Man kann auch einfach das read-only input abändern und hat 10^xxx.
Ausserdem, die Variabeln $_POST, $_COOKIE und $_GET solltest du ebenfalls als read-only betrachten. Wenn du error_reporting auf E_ALL hast dann kriegst du auch einen Hinweis darauf, wenn ich mich richtig erinnere.
|

22-06-2009, 15:03
|
|
Maanee9
Registrierter Benutzer
|
|
Registriert seit: Jun 2009
Beiträge: 29
|
|
hmm.. ok.
Stimmt. Das mit dem Zurück hab ich so noch gar nicht bedacht sowie eingies was zuvor gesagt wurde.
Aber im Prinzip sollts eigentlich nurn Beispiel sein was ich eigentlich vorhab da das Glückomat-ding eh mehr ne kleine Übung war in der ich nur was ausprobieren wollte.
Von daher besteht mein eigentlich Problem immer noch.
Ich weiß einfach nicht wie ich mit dieser Funktion was verschlüssle...
Also wie ich die Funktion aufrufe.
Ich habe jetzt Beispielsweise.
$guthaben = 5;
dann will ich als nächstes
$crypt_guthaben = verschlüsseln($guthaben);
Nur leider weiß ich jetzt nicht wie das mit der Klasse jetzt funktioniert.
(Zur Wiederholung| Klasse is per Include einfach eingebunden).
Natürlich soll das auch in die Andere richtung funktionieren.
Ich brauch eigentlich bloß kurz ein HOW-TO, wie ich mit dem Verschlüsselungsding jetzt umgehen soll.
|

22-06-2009, 15:12
|
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 2.328
|
|
Zitat:
Zitat von Maanee9
Nur leider weiß ich jetzt nicht wie das mit der Klasse jetzt funktioniert.
|
Dann lern es:
PHP: Classes and Objects (PHP 5) - Manual
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|