2012-06-13 6 views
6

Quindi, ho un sito Web che legge/verifica (e scrive) gli hash delle password dal database, e ho qualcosa che rende gli hash di password stile SHA-512 per quello, quelli che assomiglia a:Creazione di hasc di stile glibc 2.7 Sha-512 hash in Perl

$6$GloHensinmyampOc$AxvlkxxXk36oDOyu8phBzbCfLn8hyWgoYNEuqNS.3dHf4JJrwlYCqha/g6pA7HJ1WwsADjWU4Qz8MfSWM2w6F. 

Il sito Web è basato su Java, quindi ho scritto un hash SHA-512 per esso. Il problema è che ci sono un sacco di lavori di cron perl che eseguono che anche devono verificare gli hash delle password occasionalmente nel database, e poiché quelli girano su una scatola di Solaris, la cripta non supporta il formato $ 6 $.

Così, quando lo faccio:

printf("crypt => '%s'\n",crypt("Hello",'$1$CygnieHyitJoconf$')); 

torno sensibilmente:

crypt => '$1$CygnieHy$n9MlDleP0qmGCfpbnVYy11' 

considerando che, se faccio

printf("crypt => '%s'\n",crypt("Hello",'$6$CygnieHyitJoconf$')); 

ottengo un inutile

crypt => '' 

C'è un modo per ottenere gli hash delle password SHA-512 in Perl su una casella che non usa glibc? (Questo è quello che viene detto quando faccio una ricerca per lo più ("uso crypt").

mi piacerebbe molto preferisco non re-implementare SHA-512 hash delle password in perl.

Grazie!

risposta

3

Sfortunatamente no crypt sarà la tua libc di sistema crypt, che è responsabile della scelta degli algoritmi e del mapping delle stringhe di prefissi agli algoritmi.Se vuoi accedere ad algoritmi che non sono nel tuo sistema crypt allora avrai bisogno di usare una re-implementazione di loro, e nel caso di quelli di libc, non so di alcuna reimplementazione. L'hash della password "SHA-512" di glibc non è semplicemente SHA-512, è un algoritmo personalizzato che non Esiste al di fuori di glibc che io conosca. Se hai ancora una possibilità, potresti voler passare a un algoritmo come bcrypt o PBKDF-SHA-2 che ha implementazioni multiple in lingue diverse.

+0

Non è tanto un algoritmo personalizzato quanto un diverso algoritmo. È sha512crypt. SHA512 è progettato per essere FAST, che è l'opposto di quello che si desidera per una funzione di hashing della password. Segue lo standard crypt (3) insieme a bcrypt e supporta la complessità variabile (un numero variabile di "round" per renderlo più forte in futuro quando i 5000 round predefiniti non sono più sufficienti). crypt (3) è sempre ciò che dovresti usare per l'hashing della password. nient'altro, mai. –

7

In realtà, penso che ho appena trovato la mia risposta: Crypt::Passwd::XS

Crypt :: :: Passwd XS - Piena attuazione XS di crypt comune() algoritmi

Lo fa unix_md5, apache_md5, unix_des, unix_sha256 e unix_sha512 .. Immagino sia un po 'sfortunato che non faccia blowfish. Ma, tuttavia, risolve il mio problema! Grazie a @hobbs comunque!

use strict; 
use Crypt::Passwd::XS; 

{ 
     printf("crypt => %s\n",Crypt::Passwd::XS::crypt("Hello",'$6$CygnieHyitJoconf$')); 
} 

ora ritorna

crypt => $6$CygnieHyitJoconf$vkGJm.nLrFhyWHhNTvOh9fH/k7y6k.8ed.N7TqwT93hPMPfAOUsrRiO3MmQB5xTm1XDCVlW2zwyzU48epp8pY/ 

come previsto!

+0

Ehi, bello.Prenderò nota :) – hobbs

+0

Oh, la divertente Ironia. Un modulo chiamato "Crypt :: Passwd :: XS" che contiene SOLO algoritmi che non dovresti MAI usare per le password !!! bcrypt o PBKDF * ragazzi, e se non capisci perché, è meglio che tu legga. È sottile, ma è solo la differenza tra "inutile" e "funziona" !! – cnd

+0

Davvero? Perché non dovresti usare unix_sha512? Sali e per quanto ne so è ancora resistente alla collisione ..? – bnsh