2009-05-07 17 views
0

Ich bin auf der Suche nach einem Zwei-Wege-Verschlüsselungsalgorithmus, um ein Array als String zu verschlüsseln, so dass ich einige Daten sicher in einem Cookie speichern kann. Der Algorithmus sollte nicht nur das Array implodieren, ich möchte auch, dass es verschleiert wird. Meine Daten enthalten alle druckbaren Zeichen.Array als String verschlüsseln

Ein Link zu etwas würde ausreichen, ich kann einfach nicht auf Google graben. Vielleicht sollte ich das Array einfach mit irgendeinem obskuren Charakter implodieren und es dann irgendwie verschlüsseln? Ich bin nicht sicher, mit welcher Methode es zu verschlüsseln, aber es ist nicht zu sicher, die Cookie-Daten sind nicht , die empfindlich sind.

Oh ... ja, der Verschlüsselungsalgorithmus sollte mich einen Schlüssel/Salz verwenden lassen. mcrypt_encrypt scheint langwierige Ergebnisse zu liefern, aber vielleicht benutze ich nicht die richtige Chiffre. Welches ist die einfachste Chiffre (erzeugt kurze saubere Strings)?

+1

Speichern Sie keine verschlüsselten Daten in Cookies.Wenn Sie Daten zwischen zwei Websites teilen müssen, speichern Sie eine ID im Cookie und lassen Sie die andere Website die Daten mit Benutzername und Passwort anfordern (mit curl). – OIS

+0

Alles, was ich speichere, ist eine ID und ein Schlüssel, damit Benutzer den Cookie nicht fälschen können. Ich verschlimme es nur für ein gutes Maß, so dass sie nicht einmal wissen, was ich speichere. – mpen

+0

Verschleierung und Verschlüsselung sind völlig unterschiedlich. Welche willst du? –

Antwort

8

serialize() Ihre Informationen aus einem Array in einen String bekommen - und Sie es durch base64_encode() passieren könnte wenn Sie nur die Verschleierung wollen - aber nicht die Sicherheit.

Wenn Sie eine gewisse Sicherheit wollen - schauen Sie in mcrypt und Blowfish: blowfish example

+0

wusste nicht über serialize(), danke! – mpen

+0

Ich weiß, dass dies eine alte Frage ist, und eine alte Antwort, aber nur als Anregung für alle anderen Suchenden, die auf dieses Problem stoßen, sollten Sie in Betracht ziehen, [OpenSSL-Funktionen von PHP] (https://secure.php.net/) zu verwenden. manual/de/ref.openssl.php) anstelle des in dieser Antwort verlinkten Blowfish-Beispiels. OpenSSL bietet integrierte Unterstützung für viele Verschlüsselungsalgorithmen (einschließlich Blowfish und AES). Auch wenn Sicherheit für das OP kein großes Problem darstellt, wird AES im Allgemeinen als sicherer angesehen als Blowfish, daher ist es die beste Wahl. – SpencerD

1

Wenn die Sicherheit JSON spielt keine Rolle, verwenden Sie das Array zu kodieren und dann rot13 die Zeichenfolge ;-)

+1

Wenn Sicherheit keine Rolle spielt, warum sollten Sie sich mit der Verschlüsselung beschäftigen? – TwentyMiles

+0

@TwentyMiles, weil die Frage anfänglich erwähnt, dass :-) – lothar

+0

Es ist keine große Sorge, weil ich andere Sicherheitsmaßnahmen zu ergreifen, die verdammt hart sein sollten, um zu umgehen, wie es ist. Außerdem speichere ich keine vertraulichen Informationen auf meiner Website ... tatsächlich speichere ich nicht viel mehr als eine user_id. – mpen

0

Try XOR-ing all Elemente im Array speichert die resultierenden Zeichen in der Zeichenfolge - die die gleich umgekehrt zum Entschlüsseln.

0

Wenn es nicht sicher sein muss, entweder base64 oder rot13, könnte es sich lohnen, es zu betrachten.

2

würde implodieren ich encrypt Blowfish nur dann mit oder (für so lala Sicherheit) DES oder etwas ...

+0

Implodieren Sie das Array? Erklärung oder Link? thx ... – JPhi1618

+0

@ JPhi1618 http://ca3.php.net/manual/en/function.implode.php – mpen

+0

$ str = implodieren ('abc', Array ('1', '2', '3')); // $ str => "1abc2abc3" – Ickmund

4

Verwenden serialize() das Array in einen String und unserialize() zu konvertieren, um sie zurück in ein Array. Es ist dem Implodieren und manuellen Parsen weit überlegen. Für einfache Verschleierung (die jeder Programmierer durchschaut) können Sie einfache Base64-Codierung verwenden, aber Sie sollten wirklich in die mcrypt Bibliothek schauen, um einige echte Sicherheit zu bieten.

Die beste Sache wäre wahrscheinlich, das Array überhaupt nicht in einem Cookie zu speichern. Speichern Sie das Array stattdessen in einer Sitzungsvariablen, sodass der Benutzer immer eine Sitzungs-ID sehen kann. Dies funktioniert natürlich nur, wenn Sie das Array nur für die Dauer der Sitzung benötigen.

Sie sagen in Ihrem Kommentar, dass dies für einen "merke mich" -Cookie ist, also geht es um die Authentifizierung. In diesem Fall sollten Sie keine sensiblen Daten im Array speichern. Speichern Sie stattdessen einfach einen gesalzenen Hash und verwenden Sie diesen. Zum Beispiel könnte Ihr Cookie den Benutzernamen und einen gesalzenen Hash von (Datenbank Passwort Hash + IP Adressbereich) enthalten. Wenn der Benutzer auf die Website kommt, lesen Sie den Cookie und erstellen Sie den Hash aus den Informationen in Ihrer Datenbank. Wenn es mit dem Hash im Cookie übereinstimmt, loggen Sie sich automatisch ein. Wenn nicht, lösche den Cookie und tue so, als ob er niemals existiert hätte.

Auf diese Weise werden keine vertraulichen Daten im Cookie gespeichert und Sie müssen sie nicht verschlüsseln.

+0

was nicht der Fall ist :) Ich benutze es für einen "mich erinnern" -Cookie. – mpen

6

Basierend auf gnarf Antwort, dies den Trick tun soll:

function encode_arr($data) { 
    return base64_encode(serialize($data)); 
} 

function decode_arr($data) { 
    return unserialize(base64_decode($data)); 
} 

Nur für den Fall jemand eine Kopie-and-paste-Lösung will.