I tre metodi che mostri sono tutti deboli; tre invocazioni di funzioni hash non faranno molto bene, in un contesto in cui i sali sono importanti (si usano sali perché si immagina che un utente malintenzionato potrebbe, a un certo punto, avere un'idea dei valori hash e, in In tal caso, è necessario che la funzione sia molto più lenta di quella). In ogni caso, gli assemblaggi fatti in casa di primitive crittografiche raramente raggiungono una sicurezza decente.
Per rispondere alla tua domanda esplicita: il valore di sale è che non vengono riutilizzati. Nella tua prima proposta, il "sale" è in realtà la concatenazione di tre distinti sotto-sali (che tu chiami "sale1", "sale2" e "sale3"). Nella seconda proposta viene utilizzato lo stesso meccanismo, ma i tre sub-sali sono identici, ovvero una riduzione dello spazio dei possibili sali. Da un lato, uno spazio più corto aumenta la probabilità di riutilizzo. D'altra parte, il riutilizzo di alcuni dei sub-sali consente ancora alcune scorciatoie dal lato dell'attaccante.
In ogni caso, è piuttosto difficile valutare le differenze di sicurezza di due metodi di hashing quando sono entrambi deboli. Fatti un favore: usa una vera e propria funzione di hashing della password ben concepita, ben progettata e revisionata. In pratica, ciò significa bcrypt . Leggi questa risposta .