2013-02-22 10 views
5

Ich habe ein Login-Formular erstellt, in dem der Benutzer seinen Benutzernamen und sein Passwort eingibt. Wenn der Benutzername existiert, dekodiere ich das Passwort und überprüfe, ob es dasselbe ist wie das gesendete Passwort.Codeigniter kann das verschlüsselte Passwort nicht entschlüsseln

// Das ist von db

string(50) "v+bNPHNWHGQbcxrvu1vN8Ty++cMq0oEeaZesvfCfsLgNAFgZno" 

// Und das ist nach dekodieren die Zeichenfolge oben

string(32) "�� U�U{q�0�4��è€UC��o�/�*�." 

Aber es sollte

Für kodieren kehre ich verwenden

$this->encrypt->encode('123456'); 

Und das ist geheimer Schlüssel

$config['encryption_key'] = 'kRlaMneym7rF'; 

// bearbeiten

Das Problem war, dass Passwort-Feld 50

+3

Sie sollten Ihre Kennwörter nicht verschlüsseln, sondern sie hashen.Wenn ein Benutzer versucht, sich anzumelden, hashen Sie den gesendeten Wert und überprüfen ihn mit dem Hash in der Datenbank. Es gibt ein bisschen mehr (Salze, etc.), aber das ist es im Grunde genommen. – jeroen

+0

Wie entschlüsseln Sie die Daten? – Repox

+0

$ this-> encrypt-> decode ('v + bNPHNWHGQbcxrvu1vN8Ty ++ cMq0oEeaZesvfCfsLgNAFgZno'); – Ben

Antwort

4

Bitte überprüfen Sie Ihre codeigniter charset in Config

$config['charset'] = 'UTF-8'; 

gegenüber dem charset Ihrer Datenbank. Dein Konflikt kommt wahrscheinlich von dort.

Put Codeintiter zu testen und sehen, ob es das richtige Ergebnis zurückgibt. Versuchen Sie, wie zuvor zu programmieren oder kopieren und testen Sie dies in Ihrem Controller.

function testencrypting(){ 
    $str = '12345'; 
    $key = 'my-secret-key'; 
    $encrypted = $this->encrypt->encode($str, $key); 
    echo $this->encrypt->decode($encrypted, $key); 
    exit; 

}

-Mine produziert das erwartete Ergebnis: 12345. Wenn das funktioniert, dann ist Ihr Problem möglicherweise CHARACTER SET (charset). Ich benutze hier einen Verschlüsselungsschlüssel. Sie können den Standardwert in config verwenden, indem Sie den zweiten Parameter in encode und decode auslassen.

Lassen Sie mich wissen, ob das

3

Sie wollen varchar wurde auf Hash, anstatt zu verschlüsseln, und Sie können dies tun, mit der Verschlüsselungsbibliothek von CodeIgniter, die SHA1 für Hashing verwendet.

$password = $this->encrypt->sha1('123456'); 

Dies würde zurückkehren 7c4a8d09ca3762af61e59520943dc26494f8941b, das, was in der Datenbank gespeichert werden würde ist.

Sie können nicht un Hash-Passwort - Sie möchten die Hash-Eingabe gegen den Hash in der Datenbank überprüfen.

2

Haben Sie versucht:

$this->encrypt->decode($string); 
0

ive dies half herausgefunden. Ich fand, dass es war, weil die Tabelle, die ich verwendete, um das Kennwort unicode zu speichern, latin1 war. Ich änderte die Benutzer Tabelle Feld Passwort zu utf-8, die dieses Problem zu heilen schien

2

Eine mögliche Ursache könnte die Länge dieses Feldes in Ihrer Datenbank sein, das war mein Fall. Ich hatte ein Feld zu kurz.

Verwandte Themen