2017-11-08 3 views
0

ModellWie das Hash-Passwort in cakephp

App::uses('SimplePasswordHasher', 'Controller/Component/Auth'); 
class AppModel extends Model { 
public function beforeSave($options = array()) { 
    if (!empty($this->data[$this->alias]['password'])) { 
    $passwordHasher = new SimplePasswordHasher(array('hashType' => 'sha1')); 
     $this->data[$this->alias]['password'] = $passwordHasher->hash(
     $this->data[$this->alias]['password'] 
     ); 
    } 
    return true; 
} 

so entschlüsseln, wenn ich es, um das Kennwort ist Hashing aber wenn ich versuche, statt Original-Passwort einzuloggen, ich habe die gehasht zu verwenden. Nur dann wird es in immer protokolliert.

Hier habe ich gefragt, wie zu verschlüsseln, aber es hilft nicht in der Protokollierung in How to encrypt a password in cakephp 2.x version

+1

Ein Hash eines Kennworts kann nicht entschlüsselt werden, da es sich nicht um eine Entschlüsselung handelt. Was Sie tun ist, dass Sie das Passwort Hash vor der Überprüfung, ob es ein richtiges Passwort ist. Sie nehmen also eine normale Texteingabe vor und dann, bevor Sie die Passwort-Validierung machen, Hash-die Eingabe mit den gleichen Hash-Kriterien wie Sie beim Speichern des Passworts getan haben. –

Antwort

1

Wenn mit einem Kennwort anmelden, die als Hash in der Datenbank gespeichert ist müssen Sie gelten das gleiche Hash-Verfahren zu dem eingegebenen Passwort und vergleichen sie das mit dem in der Datenbank gespeichert ist: -

// Has the password supplied via the login form. 
$inputHashedPassword = (new SimplePasswordHasher(['hashType' => 'sha1']))->hash($inputPassword); 
// Compare hashed input with hashed password from the database. 
if ($inputHashedPassword === $storedHashedPassword) { 
    // Login 
} 

der Punkt der Hashing Passwörter ist, dass es nicht so nur die Person entschlüsselt werden kann, der ursprünglich das Passwort eingegeben soll kenne seinen ursprünglichen Wert. Die einzige Möglichkeit, Kennwörter zu überprüfen, besteht darin, die Hashwerte zu überprüfen.

+0

gibt es eine andere Möglichkeit, das Passwort zu verschlüsseln, aber in Laravel ist alles definiert. wie das gibt es irgendetwas – naveen

+1

@drmonkeyninja Man sollte jedoch ** ['AbstractPasswordHasher :: check()'] (https://api.cakephp.org/2.10/class-AbstractPasswordHasher.html#_check) ** dafür verwenden . Und natürlich würde die Authentifizierungskomponente das automatisch tun, dh das OP hat das wahrscheinlich nicht richtig eingerichtet. – ndm