Einfache Verschlüsselung in PHP

8

Ich baue ein With-Source-System auf, das ich an das Netz zur Bereitstellung annahmefähiger virtueller Haustiere ausliege. Das System wird hauptsächlich von Kindern betrieben. Da ich möchte, dass es für absolute Anfänger-Programmierer verwendet werden kann, gibt es einige Komplexitätseinschränkungen für mein System: Es kann keine Bibliotheken verwenden, die normalerweise nicht mit PHP ausgeliefert werden, und es kann keine Datenbank berühren oder in einen anderen permanenten Speicher schreiben .

Wenn jedes Tier adoptiert wird, erhält der Besucher zufällig eine aus einer Reihe von leicht unterschiedlichen Varianten dieses Tieres. Die Variationen sehen zunächst gleich aus, wachsen aber im Laufe der Zeit zu anderen Haustieren auf. Der Besucher erhält einen kurzen Code in HTML, der auf das Bild seines Haustiers verweist. Da auf der Serverseite kein permanenter Speicher verfügbar ist, muss der Image-Link des Benutzers alle Informationen enthalten, um zu ermitteln, welche Pet-Variante er erhalten hat.

Im Moment enthält die URL nur die ID des Haustiers und die ID der Variation, die der Benutzer erhalten hat. Das Problem dabei ist, dass die Benutzer durch den Vergleich der Codes herausfinden können, wer unter ihnen mit der gleichen Variation endete. Da einige Variationen seltener sind als andere, können Benutzer die seltenen Variationen leicht erkennen, bevor der Unterschied sogar visuell offensichtlich ist.

Was ich möchte, ist ein Verschlüsselungssystem für die Details in der URL. Etwas, das die Variations-ID verdeckt, sodass jeder Benutzer eine andere URL mit hoher Wahrscheinlichkeit erhält. Ich dachte daran, die Variations-ID (3 oder 4 Bits) als niedrige oder hohe Bits einer großen Zufallszahl zu verwenden, aber die Benutzer werden das Muster darin erkennen. Idealerweise würde das Verschlüsselungssystem so parametriert werden, dass jede Installation meines Systems eine etwas andere Verschlüsselung verwendet.

PHPs Mcrypt-Bibliothek würde wahrscheinlich etwas Nützliches dabei haben, aber unter Hostern scheint es nicht sehr üblich zu sein.

Gibt es eine einfache, parametrisierte Verschleierung / Verschlüsselung, die ich hier benutzen kann?

    
thenickdude 29.11.2008, 03:08
quelle

3 Antworten

10

Wenn Sie ein relativ niedriges Entwicklungsniveau erwarten, können Sie eine sehr einfache "xor" -Verschlüsselung durchführen und den Schlüssel als Teil der URL "speichern". Dann können Sie einfach php's rand () oder / dev / random oder was auch immer verwenden, um Schlüssel zu erzeugen.

Geringentwickelte Benutzer werden nicht ohne weiteres herausfinden, dass sie nur die untere Hälfte ihrer Haustier-ID mit der oberen Hälfte erreichen müssen, um einen Wert zu erhalten, der mit ihren Freunden verglichen werden kann. Ich schätze, die meisten Leute, die das erkennen könnten, würden sich nicht die Zeit nehmen, es herauszufinden, und diese Leute sind sowieso außerhalb Ihrer Zielgruppe.

Edit: Wenn es nicht offensichtlich war, sage ich, dass Sie jedem Haustier einen anderen Schlüssel geben (da die gleiche Lösung Ihr Problem nicht lösen würde). Wenn also die Pet-Variation (Petvar) eine 16-Bit-Zahl ist, generieren Sie eine 16-Bit-Zufallszahl (rnd), dann tun Sie dies: petvar = (petvar^rnd)<<16 | rnd; und dann können Sie diese Operation umkehren, um die rnd und dann petvar ^ rnd zu extrahieren und dann einfach xor, um das ursprüngliche Petvar zu erhalten.

    
SoapBox 29.11.2008, 03:13
quelle
16

Sie suchen nach einer "einmaligen Auffüllung" Verschlüsselung. Es nimmt einen Schlüssel und fügt den Zeichen zusätzlich den Modulus hinzu, um die verschlüsselte Zeichenfolge zu erstellen.

%Vor%

Das ist also eine einfache String-Verschlüsselung. Ich würde das Array der Parameter des Benutzers serialisieren und es als eine Variable in dem Link übergeben:

%Vor%

In load_pet.php sollten Sie das Gegenteil tun:

%Vor%

Bam.

    
John II 29.11.2008 05:16
quelle
2

Warum nicht einfach jedem Benutzer eine lange, zufällige ID geben und dann alle Details über sein Haustier auf dem Server speichern? Es empfiehlt sich, nichts in der URL zu speichern, weder verschlüsselt noch verschlüsselt. Alles was Sie brauchen, ist eine Sitzungs-ID.

    
Eli 29.11.2008 04:46
quelle

Tags und Links