Sto migrando un sito php con FOSUserBundle in un modello utente Django.
Il contenuto di app/config/security.yml
:
security:
encoders:
FOSUserBundleModelUserInterface: sha512
Valori di password / sale da un test utente sul sito PHP:
- parola d'ordine:
3EBoIIMrD73n2y+4hMUpCq2lmJ8tHStrBweonQClP+/Jhmaw7ipLbamQJQfB87Acg45sBH3HlgnpKI+QZN7m/Q==
- sale:
2n4fxtazv1us0csgg8s880ck4skcskg
- La password utilizzata è
amdpower
Ho provato a generare lo stesso hash con questo codice:
raw_password = "amdpower"
salt = "2n4fxtazv1us0csgg8s880ck4skcskg"
salted = "%s{%s}" % (raw_password, salt)
digest = hashlib.sha512(salted).digest()
for i in range(5000):
digest = hashlib.sha512(digest).digest()
print base64.b64encode(digest)
>>> wqgbbFZ/IPvwZktbmYz7inffofmT5HbRNf04BQ+w33Jgman8uVYbjWyiKzfp5EIFX2wqYGOb7hRzi5BdZlzDKw==
Cosa c'è di sbagliato nel codice di hashing che ho provato? Come posso generare lo stesso hash?
Aggiornare:
Le funzioni PHP sono:
FOSUserBundle: https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Model/UserManager.php#L180
symfony: https://github.com/symfony/symfony/tree/master/src/Symfony/Component/Security/Core/Encoder
risolto:
raw_password = "amdpower"
salt = "2n4fxtazv1us0csgg8s880ck4skcskg"
salted = "%s{%s}" % (raw_password, salt)
digest = hashlib.sha512(salted).digest()
for i in range(4999):
digest = hashlib.sha512("%s%s" % (digest, salted)).digest()
print base64.b64encode(digest)
>>> 3EBoIIMrD73n2y+4hMUpCq2lmJ8tHStrBweonQClP+/Jhmaw7ipLbamQJQfB87Acg45sBH3HlgnpKI+QZN7m/Q==
risposte:
0 per risposta № 1Qui ho ricreato lo scenario su come Symfony blocca la password.
Ora si tratta di convertirlo in python, che so che puoi farlo Juan :)