2009-07-15 22 views
1

Wie einfach zu verschlüsseln und URL/E-Mail-Adresse in PHP string?Codierung und Komprimierung von URL in PHP

String sollte sein:

  1. schwierig durch Benutzer soll
  2. so kurz wie möglich (komprimiert)
  3. ähnlicher URLs unterschiedlich sein zu entschlüsseln nach der Codierung
  4. nicht in der Datenbank
  5. einfach durch das PHP-Skript entschlüsseln/dekomprimieren

ex. Eingang -> Ausgang, stackoverflow.com/1/ -> "n3uu399", stackoverflow.com/2/ -> "ojfiejfe8"

+0

Was brauchen Sie, dass für verwenden? – Gumbo

+0

Versuchen Sie, eine Art URL-Verkürzung zu erstellen? – Boldewyn

+0

Ich brauche das für viele Probleme ex. E-Mail-Bestätigung durch Klicken auf example.com/confirm.php?id=ii3ru38jd39 <- verschlüsselte & komprimierte E-Mail-Adresse – Colargol

Antwort

4

Nicht sehr kurz, aber man kann zip es mit einem Passwort und codiert es base64 mit . Beachten Sie, dass zip is not too safe when it comes to passwords, aber sollte in Ordnung sein, wenn Ihr verschlüsselter Wert eine kurze Lebensdauer haben soll.

Beachten Sie, dass Sie, unabhängig von Ihrer Vorgehensweise, keine ungefährliche Codierung generieren können, es sei denn, Sie stimmen zu, einige nicht zugängliche Informationen lokal zu speichern. Das heißt, was auch immer Sie tun, nehmen Sie es als gegeben, dass jemand auf die pseudo-verschlüsselten Daten mit genügend Zeit zugreifen kann, sei es durch Reverse Engineering Ihres Algorithmus, Brute-Force Ihre Passwörter oder was auch immer notwendig ist.

-2

Wenn Sie Zugriff auf eine Datenbank haben, können Sie eine relationale Suche durchführen, d. H. Es gibt 2 Felder, wobei Feld eins die ursprüngliche URL und das zweite die komprimierte URL enthält. Um die zweite URL machen Sie so etwas wie die folgenden

$str = "a b c d e f g h i j k l m n o p q r s t u v w x y z"; 

$str = explode(" ", $str); 
$len = 5; 

for($i = 0; $i < $len; $i++) 
{ 
    $pos = rand(0, (count($str) - 1)); 
    $url .= $str[$pos]; 
} 

Dies ist nur eine Idee tun könnte, dass ich dachte erstellt haben, Code

nicht getestet
+0

4. nicht in der Datenbank – SeanJA

+1

Ich denke, Sie würden sehr wahrscheinlich Kollisionen (d. H. Der gleiche Code für verschiedene URLs). Außerdem müssen Sie die Zeichenfolge nicht in ein Array aufteilen. Sie können mit [] trotzdem auf String-Offsets zugreifen. Außerdem wäre es besser, count() außerhalb der Schleife aufzurufen und das Ergebnis zu speichern. –

2

Sie können Ihren eigenen Text Kompressionssystem basierend auf machen common strings: Wenn die URL 'http://www.' beginnt, ist das erste Zeichen der verkürzten URL 'a', wenn es 'https://www.' beginnt, dann ist das erste Zeichen 'b' ... (für beliebte Varianten wiederholen), Wenn nicht, dann ist der erste Buchstabe "z" und die URL folgt in einem codierten Muster.

Wenn die nächsten drei Buchstaben "abc" sind, ist der zweite Buchstabe "a" usw. Sie benötigen eine Liste, welche Buchstabenpaare/Triplets am häufigsten in URLs vorkommen und die beliebtesten 26/50 usw (abhängig davon, welche Zeichen Sie verwenden möchten) und Sie sollten in der Lage sein, die URL vollständig in PHP zu komprimieren (ohne eine Datenbank zu verwenden). Personen können sie nur rückgängig machen, indem Sie entweder Ihr Briefpaar/Ihre Triplet-Liste (Ihre Mapping-Liste) kennen oder sie manuell reverse-engineeren.

0

Hier ist eine einfache Implementierung, die Ihre Bedürfnisse kann oder nicht erfüllen:

Input/Output:

[email protected] cyUzQTEzJTNBJTIydGVzdCU0MHRlc3QuY29tJTIyJTNC    [email protected] 
http://test.com/ cyUzQTE2JTNBJTIyaHR0cCUzQSUyRiUyRnRlc3QuY29tJTJGJTIyJTNC http://test.com/ 

Code:

function encode ($in) { 
    return base64_encode(rawurlencode(serialize($in))); 
} 

function decode ($in) { 
    return unserialize(rawurldecode(base64_decode($in))); 
} 

zucken

Sie müssen genauer über Ihre Ein- und Ausgänge und was Sie von jedem erwarten.

Sie könnten auch gzcompress/gzuncompress statt serialize/unserialize usw.