Contribuisco a un progetto PHP open source relativamente maturo. Recentemente, ho scoperto che memorizza le password come semplici hash MD5, il che è piuttosto fastidioso per me. Ho pensato che se avessi intenzione di risolverlo, avrei potuto anche fare Do It Right (tm), quindi volevo usare bcrypt.Come posso vendorizzare bcrypt in un'applicazione PHP (e dovrei)?
In primo luogo, quello che ho trovato per altre lingue: bcrypt-ruby sembra utilizzare il codice C originale da OpenBSD o codice java jBCrypt. py-bcrypt è un sottile involucro attorno al codice BSD. BCrypt.net è una porta diretta di jBCrypt.
Ora, PHP stesso supporta bcrypt (anche se, ingannevolmente chiamato semplicemente 'blowfish') in the crypt function. Tuttavia, le versioni precedenti alla 5.3 richiedono il supporto del sistema stesso, generalmente fornito da crypt_blowfish. phpass è lo stesso e consiglia di installare PHP 5.3 o Suhosin.
Poiché molti utenti dell'applicazione utilizzano l'hosting condiviso standard, non desidero richiedere alcuna configurazione speciale del server. Speravo di rubare il codice dalla versione 5.3 di PHP, ma è in C, e (dal poco di lettura che ho appena fatto) non posso richiedere l'uso di un'estensione C per gli utenti del progetto.
Ho pensato di creare una porta in puro PHP di bcrypt, ma guardando the source of jBCrypt, non sono sicuro che dovrei, dato che non sono incredibilmente familiare con PHP o blowfish, e un errore qui potrebbe essere contemporaneamente pericoloso e difficile da rilevare in primo luogo.
Quindi, vi presento due domande (più parti):
- È mia mancanza di conoscenza PHP ottenere il meglio di me? Posso davvero utilizzare una delle implementazioni già create?
- Dovrei invece creare una semplice funzione loooping che chiama ripetutamente
sha1()
omd5()
per un numero di volte configurabile?
+1 per non crittografare le password. Gli hash dovrebbero sempre essere usati. – rook
Anche se bcrypt è in realtà una funzione di hash costruita con un codice a blocchi ... – rook
Null, hai qualche risorsa da gettare al problema sotto? –