Di tanto in tanto, quanto interessante sarebbe se l'output di un hash o hash salato fosse lo stesso dell'input.
Gli algoritmi di hash non hanno in genere alcuna protezione contro questo come parte dei criteri di progettazione. In effetti, sarebbe molto semplice aggiungere un ulteriore passaggio, affermando che se l'output corrisponde (parte di) l'input, commuta il primo bit nella parte corrispondente, impedendo in tal modo una tale ricerca.
Trovare un input / output corrispondente sarebbe certamente affascinante per me, tuttavia, ciò che lo rende non tanto interessante, è quando si considera, quale rappresentazione dell'hash dovrebbe corrispondere all'input?
L'input è in genere una serie di byte da 8 bit, sia come testo in varie codifiche, sia come binario non elaborato.
L'output è un numero fisso di byte grezzi, 8 bit, rappresentati spesso come rappresentazione esadecimale big-endian dei valori di n * 8 bit come numero.
Sarebbe sicuramente una curiosità se l'output dell'MD5 di un numero decimale (o binario) in formato stringa (ad esempio "12345 ....") fosse un numero esadecimale corrispondente allo stesso numero esatto, giusto?
Ma se l'output, interpretato come un numero elevato in un formato binario, sarebbe lo stesso numero esatto, (se stampato in formato decimale), la maggior parte di noi non si accorgerebbe nemmeno dell'equivalenza. Ma sarebbe altrettanto teoricamente interessante.
Un altro esempio potrebbe essere molto sospetto, ma si noterà che questo (falso) output MD5 è in realtà in testo ASCII?
48454c5021496d207472617070656421
Se fosse emesso come codifica Base64, sarebbe molto difficile per la maggior parte di noi vedere questo fatto.