Bonjour à tous !

Je suis actuellement entrain de migrer un site en PHP, vers Symfony, les passwords users sont en SHA1 dont je connais le salt, est-il possible de 'migrer' les mots de passe du SHA1 avec le salt vers les méthodes de hash de Symfony ?

4 réponses


popotte
Réponse acceptée

Ah okay je vois xD

Alors le SHA-1 et la méthode Symfony c'est deux choses différentes, le hash de Symfony c'est juste le fait que Symfony va hasher le password avec l'algo que tu lui aura demandé dans security.yml (par défaut SHA-256), et SHA-1... Bah c'est une algo :p

Pour répondre à ta question: Impossible ^^ Un hash est conçu pour être irreversible, pas possible de sortir de clair à partir d'un hash

Pour migrer les SHA-1 vers du SHA-256 tu peux passer par un middleware

En gros tu places dans la base de données les users avec leurs SHA-1, coté Symfo tu laisses le hash en mode SHA-256

Quand quelqu'un se connecte avec son user/password, tu va faire passer la personne par un middleware qui va vérifier dans la base si le password du user en question est en SHA-1 ou SHA-256 (le SHA-1 génère une string de 40 caractères, tu peux vérifier comme ça) si la longueur du hash dans la base de données fait plus de 40 caractères, c'est du SHA-256 tu quittes le middleware

($user c'est le user récupéré dans la base de données avec le nom/email donné par l'utilisateur, $request c'est le name/email/password donné par le l'utilisateur)

if (strlen($user->password) !== 40) {
    return;
}

Par contre si la longueur fait 40 caractères, alors le password est encore en SHA-1, pour commencer tu checkes toi même le password

if (hash('sha1', 'salt' . $request->password) === $user->password) {...} else {error...}

Si la personnes a donné le bon password, tu va update la base en remplaçant le SHA-1 par le SHA-256 (ou mieux SHA-519)

if (hash('sha1', $request->password) === $user->password) {
    $user->setPassword(hash('sha256', 'salt' $request->password));
    $entityManager->flush();
} else {error...}

Comme ça les changements de passwords se feront petit a petit :p

Oui je sais c'est pas idéal comme solution les utilisateurs inactif garderont longtemps leur SHA-1 mais je vois pas mieux ^^'

Hello :)

Déjà faut configurer le hash de Symfony pour du SHA1 dans la config security.yml

security:
    password_hashers:
        legacy:
            algorithm: sha256
            encode_as_base64: false
            iterations: 1

Ensuite dans le controller qui récupère la request du password tu ajoutes le salt toi même :p

Après bon ce serait mieux de passer au SHA-256, le SHA-1 n'est plus safe depuis 2005 :x

Alex_13
Auteur

Salut popotte,

Merci de ta réponse, en revanche, ce n'est pas celle que j'attendais ^^

Je voulais savoir si on pouvais passer un password en sha1 avec du salt vers un hash avec la méthode de Symfony pour hasher les passwords

En gros, j'ai une table users avec les infos utilisateurs dont les password en SHA1, mon but: les sortir du SHA1 et les migrer vers un hash safe :)

Bises

Alex_13
Auteur

Merci popotte, c'est pas une mauvaise idée, je vais voir :)