XHTMLforum

XHTMLforum (http://xhtmlforum.de/index.php)
-   Serveradministration und serverseitige Scripte (http://xhtmlforum.de/forumdisplay.php?f=80)
-   -   Char oder Varchar (http://xhtmlforum.de/showthread.php?t=62357)

rs-web 12.09.2010 11:32

Char oder Varchar
 
Hi,
ich steh vor einem kleinem Problem:

Ich bin dabei eine Benutzerregistrierung einzurichten. Man kann über das Backend einstellen wie lange ein Benutzername sein darf, also z.B. 20 Zeichen. Wenn ich jetzt Char mit einer festen länge nutze und jemand diese 20 Zeichen auf, z.B. 25 erhöht, müsste ich die Char länge auch erhöhen. Der Nachteil ist, dass ich sie dannach nicht mehr auch 20 setzten kann, weil sich ja dann ein Name mit 25 Zeichen darin befindet.

Ich könnte das ganze auch mit varchar machen und somit dynamisch bleiben und könnte ihn auch nachträglich runtersetzten. Was ich mich frage, für was ist dann das Länge Attribut bei Varchar, wenn sie doch dynamisch ist?

Ich habe hier gelesen, dass statisch durchaus Vorteile hat:
CHAR oder VARCHAR? Statisch oder dynamisch? Beitrag PHP Performance

Danke schon Mal

LG rs-web

inta 12.09.2010 12:37

Zitat:

Zitat von rs-web (Beitrag 474356)
Was ich mich frage, für was ist dann das Länge Attribut bei Varchar, wenn sie doch dynamisch ist?

Das ist die maximale Anzahl der Zeichen die ein Varchar-Feld aufnehmen kann, also ähnlich wie beim Char, nur dass nicht benötigter Platz bei Varchar nicht durch Leerzeichen aufgefüllt wird.

rs-web 12.09.2010 12:46

Hi,
ok danke. Wenn ich jetzt ein Passwort habe, dass unverschlüsselt maximal 60 Zeichen lang sein darf, wie lang soll dann die varchar spalte werden?

LG rs-web

Praktikant 12.09.2010 13:01

Zitat:

Zitat von rs-web (Beitrag 474363)
Hi,
ok danke. Wenn ich jetzt ein Passwort habe, dass unverschlüsselt maximal 60 Zeichen lang sein darf, wie lang soll dann die varchar spalte werden?

LG rs-web

Kommt drauf an, wie du das verschlüsselst. MD5 ist, soweit ich weiß verschlüsselt immer 32 Zeichen lang. Wenn du eine Verschlüsselungsmethode wie Whirlpool nimmst, dann ist diese Kette immer 128 Zeichen lang. Es kommt halt darauf an. Ich speichere meine Passwörter immer als 138-Zeichen langen salted-Hash, was schon sehr viele Zeichen sind und verschlüssel dabei mehrfach.

rs-web 12.09.2010 13:03

Hi,
das mit dem salted Hash klingt interessant. Ich hatte zwar eig. sha1() geplant.

LG rs-web

inta 12.09.2010 13:27

Du kannst jeden Hash salzen.

Ein Beispiel für die Umsetzung findest zu hier:
http://xhtmlforum.de/48700-nochmal-i...tml#post357502

protonenbeschleuniger 12.09.2010 14:36

Nur zur Info: Zumindest in älteren Versionen von mysql war das so, dass wenn die Tabelle ein varchar Feld enthält, alle anderen char Felder automatisch zu varchar umgewandelt werden. D.h. um den nutzen von char zu bekommen, musst du dafür sorgen, dass alle Felder char sind.

Praktikant 12.09.2010 14:39

War es nicht generell so, dass wenn du ein char-Feld nutzen willst, alle anderen Felder der Tabelle auch statisch sein mussten? Egal ob varchar, text oder sonst was?
Ich glaube nicht, dass sich daran was geändert hat :)

protonenbeschleuniger 12.09.2010 15:32

Ich wollte es so formulieren, dann ist mir aber kein Feld eingefallen, das nicht statisch sein kann (ausser Text, Blob u.ä.). Aber man kann es sicher auch so sagen.

rs-web 12.09.2010 18:18

Hi,
danke für eure Antworten. Um noch mal auch das salten zurück zu kommen, hier Gumbos Funktion:

PHP-Code:

function randCrypt$str$salt=null )
{
    if( 
is_null($salt) ) {
        
$s substr(md5(uniqid(rand())), 08);
    } else {
        
$s substr($salt08);
    }
    
$h $s.md5($s.$str);
    if( !
is_null($salt) ) {
        return 
$salt === $h;
    }
    return 
$h;


wie soll sich denn der User da einloggen, wenn er den Salt nicht kennt? Der Sinn ist doch, dass man zm Passwort, noch einen Zufallsstring verschlüsselt oder?

LG rs-web

rs-web 12.09.2010 18:39

Achja eine Frage hab ich noch:

Wie viel Platz muss ich jetzt für einen sha1 String reservieren. Hab schon gegoogelt, aber nix gefunden...

LG rs-web

Praktikant 12.09.2010 18:42

Genau, das ist der Sinn dabei. Der Benutzer muss das Salz auch garnicht kennen. Du musst nur im Nachhinein beim Anmelden den Salt wieder vom passwort "trennen" können und an den String hängen. So dass die beiden verschlüsselten Strings übereinstimmen.

Alternativ kannst du, wenn du nicht mit einem wechselnden Salt arbeiten willst, diesen im System hinterlegen und immer die Passwörter reinbringen. Die Funktion muss ihn dann halt kennen, wenn die Nutzereingabe verschlüsselt wird. Stimmen beide Hashes überein, so war das Passwort mit hoher Wahrscheinlichkeit richtig.

Edit: Für den sha1() String brauchst du 40 bzw. 20 Zeichen. Manual: sha1() :)


Alle Zeitangaben in WEZ +2. Es ist jetzt 09:31 Uhr.

Powered by vBulletin® Version 3.8.11 (Deutsch)
Copyright ©2000 - 2024, vBulletin Solutions, Inc.

© Dirk H. 2003 - 2023