nicht wiederkehrende, unerratbar Kennung (ID)

Trashi

New Member
Hallo.

Ich möchte eine _niemals_ wiederkehrende, nicht nachvollziehbare ("unerratbare") Kennung (ID) mit PHP5 generieren.
a.) Ist es überhaupt möglich, beide Bedingungen gleichzeitig zu 100% zu erfüllen.
b.) Was schlag ihr dafür vor?
c.) Was haltet ihr von dieser Lösung:

Code:
$id = md5(uniqid(mt_rand(), true));
Ich habe mich schon etwas zu den genannten Funktionen belesen, allerdings bin ich nicht sicher ob meine 2 o.g. Bedingungen zu 100% erfüllt werden.

Danke und viele grüße
 
a.) Ist es überhaupt möglich, beide Bedingungen gleichzeitig zu 100% zu erfüllen.
Wenn die Kennung eine feste Laenge haben soll: theoretisch nein, praktisch haengt es von der Laenge und der Anzahl der generierten Kennungen ab.

b.) Was schlag ihr dafür vor?
Du willst eine GUID oder UUID. Dafuer gibt es ein entsprechendes PECL-Paket: http://pecl.php.net/package/uuid

Wenn du mit einer MySQL-Datenbank im Backend arbeitest, kannst du auch die eingebaute Funktion bzw. bei PostgreSQL den eingebauten Typ verwenden.

c.) Was haltet ihr von dieser Lösung:
Du beschraenkst dich damit kuenstlich auf eine UID mit (recht wenig) 128 Bits. Ausserdem ist nicht wirklich sichergestellt, dass zwei unterschiedliche mit uniqid() generierte Kennungen nicht die gleiche MD5-Summe erzeugen.
 
Ok. Erstmal vielen Dank für die Ansätze.
Im Endeffekt möchte ich neu eintreffenden Dateien Namen geben und diese Namen Benutzern in der MySQL Datenbank zuordnen, so dass jeder Benutzer nachher, nur auf seine Dateien Zugriff hat.

Wie wäre in diesem Zusammenhang die einfache Bildung einer MD5 Summe für die jeweilige Datei? Zu unsicher?
 
Dafür musst Du ja nicht zwangsläufig den Dateien einen "Kryptischen" Namen vergeben. Sondern musst die Daten in einem nicht zugreifbaren Ordner ablegen und den Dateiinhalt über php Ausliefern.

Ein Biespiel dazu kannst Du hier finden.

http://www.zubrag.com/scripts/download.php

Das ist nur eine Beispiel wie man Dateinhandles umsetzt.
Über "Sicherheit" und Zugriffsberechtigungen musst Du Dir eigene Gedanken machen. Das ist hier nicht perfekt gelöst.

Um zufälliges überschreiben Fremder Inhalte zu vermeiden würde ich die Dateien den Benutzern zugeordnet in Unterordner ablegen.

Alternativ kann man natürlich auch den Dateinamen auf dem System wie folgt zusammen setzen:

<beliebiges küerzel><nur intern bekannte user_id><fortlaufende-dateiid>.<Dateikürzel>

Damit es dennoch zu keinen Verwechslungen kommen kann, natürlich die Zahlen mit vorangestellten nummern etc. auffüllen.
Oder Alphanumerische Zahlenvergabe (Hexadezimal) ebenfalls fortlaufend.
 
Last edited by a moderator:
Wie waere es mit einer Kontrolle ob die ID nicht schon belegt ist?
Dann musst du nicht eine mathematisch garantiert einzigartige ID suchen sondern nur eine while(true) { } schleife bauen welche durchprobiert bis sie eine leere gefunden hat (was normalerweise der 1. oder 2. Versuch sein sollte)
 
Last edited by a moderator:
IPs sind ja selten Statisch, wie willst Du dann u.a. auch die Zugriffe regeln?

Eine rein IP basierte Lösung wäre mir da zu unsicher und uneindeutig.
 
Back
Top