php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 24.09.2004, 14:57  
Gast
 
Beiträge: n/a
Standard [Erledigt] Brauche Hilfe bei meiner ersten Klasse

Ich habe mir heute meine erste Klasse geschrieben und bin da noch etwas unsicher.

Wäre fein, wenn ihr mir eure Meinung dazu geben könnt.

Die Klasse soll ein übergebenes Passwort verschlüsseln und dann verschlüsselt wieder zurückgeben.
Es soll aber auch möglich sein, diese Klasse ohne Passwort aufzurufen. In diesem Fall soll ein Passwort zufällig erstellt werden.

Die Klasse funktioniert auch soweit. Mich würde interessieren, ob ich wirklich im Sinne einer Klasse programmiert habe.

PHP-Code:
<?php
    
class PasswordMd5 {

        var 
$_password;
        var 
$_pool 'qwertupasdfghkxcvbnm23456789WERTUPLKJHGFDSAXCVBNM';

        function 
PasswordMd5($password '') {
            
$this->_password addslashes(trim($password));
            
// Wenn Passwort leer, dann erstelle ein zufälliges
            
if(empty($this->_password)) {
                
srand((double)microtime()*1000000);
                for(
$i 0$i 7$i ++) {
                    
$this->_password .= substr($this->_pool,(rand() % (strlen($this->_pool))), 1);
                }
            }
        }

        
// Passwort verschlüsseln und zurückgeben
        
function CodePw() {
            return 
md5($this->_password);
        }

    }
    
    
$password '';
    
$md5pw = new PasswordMd5($password);
    
    echo 
$md5pw->CodePw();
?>
  Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 24.09.2004, 15:57  
Gast
 
Beiträge: n/a
Standard

Ich hab da noch etwas drauf rumgedacht und die Klasse jetzt so umgeschrieben.

Würde mich wirklich freuen, wenn sie jemand kreativ kommentieren würde und eventuell Tipps für Verbesserungen geben kann.

PHP-Code:
<?php
    
class PasswordMd5 {

        var 
$_password;
        var 
$_pool 'qwertupasdfghkxcvbnm23456789WERTUPLKJHGFDSAXCVBNM';
        var 
$_rate;

        function 
PasswordMd5($password ''$rate 7) {
            
$this->_password addslashes(trim($password));
            
$this->_rate $rate;
        }

        
// Passwort erstellen und zurückgeben
        
function SetPw() {
            
srand((double)microtime()*1000000);
            for(
$i 0$i <= $this->_rate$i ++) {
                
$this->_password .= substr($this->_pool,(rand() % (strlen($this->_pool))), 1);
            }
            return 
$this->_password;
        }

        
// Passwort verschlüsseln und zurückgeben
        
function CodePw() {
            return 
md5($this->_password);
        }

    }

    
// $rate gibt die Anzahl der Durchläufe an. Je höher die Zahl, desto sicherer das Passwort
    
$password '';
    
$rate 6;
    
$md5pw = new PasswordMd5($password$rate);
    
$pw    $md5pw->SetPw();
    echo 
$pw.'
'
;
    
$pwmd5 $md5pw->CodePw();
    echo 
$pwmd5;
?>
  Mit Zitat antworten
Alt 24.09.2004, 16:03  
Erfahrener Benutzer
 
Registriert seit: 10.09.2004
Beiträge: 339
mkl0815
Standard

hallo,

die klasse ist ok, aber der anwendungsfall ist etwas unglücklich gewählt. eine klasse bringt dir hier gegenüber einer einfachen funktion keinen großen vorteil.

klassen machen sinn wenn man daten darin speichert und gleich die notwendigen funktionalitäten zu diesen daten dazupackt.

deine klasse speichert zwar das passwort, dieses wird aber im prinzip nie wieder benötigt, da du ja das verschlüsselte passwort wieder zurücklieferst.

interessant wäre die klasse wenn sie z.b. einen user mit name, login, passwort etc. verwaltet und über die methoden der klasse zugriff auf die daten gestattet.

mario.
__________________
Problems with Windows : REBOOT
Problems with Linux : BE ROOT
mkl0815 ist offline   Mit Zitat antworten
Alt 24.09.2004, 16:11  
Gast
 
Beiträge: n/a
Standard

Hallo mkl0815

Danke für deinen Beitrag.

Dein Vorschlag klingt gut. Ich fürchte aber, das ich dafür noch nicht weit genug in die Materie vorgedrungen bin.
Aber der Tag ist ja noch nicht vorbei und die 3. Version ist inzwischen in Arbeit.
Mir ist nämlich aufgefallen, dass wenn man die Verschlüsselung anfordert, ohne vorher ein Passwort angegeben zu haben oder erzeugen zu lassen, die Klasse einfach einen leeren String verschlüsselt.
Der sieht natürlich immer gleich aus.

Ich frickel da noch etwas rum und versuch das Problem selber zu lösen. Wenn ich's nicht schaffe, poste ich hier einen Hilferuf. :wink:
  Mit Zitat antworten
Alt 24.09.2004, 16:17  
Erfahrener Benutzer
 
Registriert seit: 10.09.2004
Beiträge: 339
mkl0815
Standard

generell ist der ansatz bei objektorientierter programmierung die verknüpfung von daten und funktionalität und das kapseln von daten.
das soll heissen das man nicht mehr direkt auf die daten einer klasse wie bei einer variablen zugreift, sondern nur noch über die definierten methoden. somit hat der programmierer einer klasse viel mehr kontrolle darüber was mit den daten passiert.

OOP wird eigentlich erst wirklich ab PHP5.x interessant, da hier wesentliche Konzepte der OOP wie z.b. exceptions o.ä. umgesetzt werden.

nichtsdestotrotz macht es durchaus sinn auch in php 4.x mit klassen zu arbeiten, da der code besser lesbar und wartbar ist.

wenn du deine klassen möglichst abstrakt baust, also die funktionalität möglichst allgemein hälst, kannst du ein und die selbe klasse immer wieder einsetzen und sparst somit mit der zeit viel programmieraufwand.

mario.

p.s. am besten mal nach OOP googeln, da finden sich sicher gute tutorials die das konzept (unabhängig von php) gut erklären.
__________________
Problems with Windows : REBOOT
Problems with Linux : BE ROOT
mkl0815 ist offline   Mit Zitat antworten
Alt 24.09.2004, 16:37  
Gast
 
Beiträge: n/a
Standard

Also was OOP ist und wofür es gut ist habe ich jetzt schon in mehreren Tutorials gelesen.
Das Problem ist bei mir viel eher, dass ich keine sinnvolle Anwendung finde.
Anfang der Woche habe ich mit Hilfe eines Tutorials eine Klasse geschrieben, die meine Datenbankverbindung aufbaut.

Demnächst will ich diese Klasse noch mit diesem Beispiel http://tut.php-q.net/mysql-class.html
erweitern.

Aber nun habe ich bereits zum 3. Mal in verschiedenen Skripten eine Passworterstellung eingefügt. Jedesmal neu in den Skript-Code eingefügt.
Nun habe ich mich entschlossen diesen Schnipsel in eine Klasse umzuschreiben. Eine Funktion reicht mir nicht. Das Prinzip habe ich ja bereits verstanden.

Hier die aktuelle Version meiner Klasse.

PHP-Code:
<?php
    
class PasswordMd5 {

        var 
$_password;
        var 
$_pool 'qwertupasdfghkxcvbnm23456789WERTUPLKJHGFDSAXCVBNM';
        var 
$_rate;

        function 
PasswordMd5($password ''$rate 7) {
            
$this->_password addslashes(trim($password));
            
$this->_rate $rate;
        }

        
// Passwort erstellen und zurückgeben
        
function SetPw() {
            
srand((double)microtime()*1000000);
            for(
$i 0$i <= $this->_rate$i ++) {
                
$this->_password .= substr($this->_pool,(rand() % (strlen($this->_pool))), 1);
            }
            return 
$this->_password//Gibt das unverschlüsselte Passwort zurück
        
}

        
// Passwort verschlüsseln und zurückgeben
        
function CodePw() {
            if (empty(
$this->_password)) { // Überprüft, ob das Passwort leer ist
                
$this->SetPw();
            }
            return 
md5($this->_password); //Gibt das verschlüsselte Passwort zurück
        
}

    }

    
$password 'test';
    
$rate 6// $rate gibt die Anzahl der Durchläufe an. Je höher die Zahl, desto sicherer das Passwort
    
$md5pw = new PasswordMd5($password$rate);
    
//$pw    = $md5pw->SetPw();
    //echo $pw.'
';
    echo $password.'
';
    $pwmd5 = $md5pw->CodePw();
    echo $pwmd5.'
;
    echo 
md5($password);
?>
  Mit Zitat antworten
Alt 24.09.2004, 16:55  
Erfahrener Benutzer
 
Registriert seit: 10.09.2004
Beiträge: 339
mkl0815
Standard

der korrektheit halber noch ein kleiner hinweis.
md5() ist ein hash-wert, keine verschlüsselung. wie der name schon sagt braucht man zum verschlüsseln einen schlüssel. md5() ist eine einweg-funktion. das bedeutet das man aus der md5-summe den originalwert nicht mehr ermitteln kann. somit kann man passwörter recht sicher speichern.
allerdings kann man das originalpasswort nicht mehr ermitteln.

prinzipiell ist das wie das berechnen der quersumme einer zahl, bei der man auch nicht mehr ermitteln kann, ob die quersumme 5 nun aus 11111, oder 23 oder 131 o.ä. ermittelt wurde.

mario.
__________________
Problems with Windows : REBOOT
Problems with Linux : BE ROOT
mkl0815 ist offline   Mit Zitat antworten
Alt 24.09.2004, 16:59  
Gast
 
Beiträge: n/a
Standard

Ja, ich weiß. Hab ich den Eindruck hinterlassen, das ich das nicht wüsste

Kann sein, das ich mich weiter oben falsch ausgedrückt habe, das sliegt meist daran, dass ich nicht besonderen Wert drauf lege alles immer direkt beim Namen zu nennen.

Meist fallen mir die Fachbegriffe auch einfach nicht ein. Dann beschreibe ich es immer so, wie ich kann.
  Mit Zitat antworten
Alt 24.09.2004, 17:06  
Erfahrener Benutzer
 
Registriert seit: 10.09.2004
Beiträge: 339
mkl0815
Standard

das war auch keine kritik. das problem ist aber, das wir hier mit dem forum eine gewisse lehrerwirkung haben. vor allem die, die schon tiefer in der materie stecken, zu denen du sicherlich gehörst.

es wäre schade, wenn wissen falsch oder unvollständig weitergegeben würde.

ich finde nämlich das deine posts sehr informativ und fachlich kompetend sind, zumal du dich nicht scheust fehlendes wissen zuzugeb und neues wissen mit anderen zu teilen.
*lob*

mario.
__________________
Problems with Windows : REBOOT
Problems with Linux : BE ROOT
mkl0815 ist offline   Mit Zitat antworten
Alt 24.09.2004, 17:09  
Gast
 
Beiträge: n/a
Standard

*geschmeichelt fühl*

Das hab ich auch weniger als Kritik aufgefasst. Ich hatte nur befürchtet, dass ich mich weiter oben falsch ausgedrückt habe.

Das würde ich nämlich auch nicht wollen, das man aus meinem Beiträgen falsche Erkenntnisse zieht.
  Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Brauche hilfe mik08 PHP Tipps 2008 10 27.07.2008 16:17
Datenbanktabelle erstellen - brauche Hilfe Raccoon PHP Tipps 2008 1 14.06.2008 11:03
Ich brauche eure Hilfe beim rechnen... GELight PHP Tipps 2006 6 07.04.2006 14:20
Ey, ich brauche Hilfe 77King PHP Tipps 2006 10 30.03.2006 08:22
Kontaktforumular brauche Hilfe! Huggy PHP Tipps 2006 11 17.03.2006 19:01
Ich brauche eure Hilfe PHP Tipps 2006 22 19.02.2006 19:57
PHP <--> MySQL | Brauche Hilfe ahnungsloser Datenbanken 18 16.02.2006 21:49
brauche eben hilfe PHP Tipps 2007 2 26.11.2005 08:36
brauche sehr schnell und dringend hilfe Beitragsarchiv 13 24.10.2005 13:11
HILFE ! Brauche ganz dringend hilfe! PHP Tipps 2005-2 2 10.10.2005 23:08
brauche hilfe!!! marcelglaeser HTML, Usability und Barrierefreiheit 0 03.10.2005 20:01
Hilfe, Ich brauche hilfe! Kevin PHP Tipps 2005-2 2 27.09.2005 19:31
Brauche Hilfe bei preg_match() PHP Tipps 2005-2 2 23.07.2005 22:44
[Erledigt] Brauche dringend Hilfe PHP Tipps 2005 19 01.02.2005 20:21
Brauche Hilfe - kenne mich nicht aus - zahlen auch dafür Beitragsarchiv 1 09.08.2004 16:10

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
brauche in meiner klasse, php skript \quersumme einer zahl\

Alle Zeitangaben in WEZ +2. Es ist jetzt 23:01 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.