L'md5 (o qualsiasi hash per quella materia) di una stringa include il terminatore null nei suoi calcoli? Ciò significa che l'hash di una stringa è uguale all'hash della sequenza di byte che rappresenta la stringa meno il terminatore null.
Penso che questo dipenda più dall'implementazione dell'algoritmo di hashing che dalla loro abilità all'hash una stringa terminata da null includendo il terminatore null stesso.
Alcune occorrenze di tali implementazioni di funzioni hash sono state osservate in TrouSerS (versione 0.2 creata su Pantaloni Software Stack 1.1 o precedente) utilizzato in Gentoo Linux come una delle librerie crittografiche nel suo stack di software e in TrustedJava (prima di jTSS 0.4a), e in IBM Client Security Software, entrambe le implementazioni includevano terminatori nulli nelle voci di dialogo di popup password (stringhe con terminazione nulla compresi gli stessi terminatori null).
Allo stesso modo, puoi UTF-16 codificare il testo in chiaro prima di passarlo alla funzione di hashing, causando ogni altro carattere nell'input da processare come 0x00
o carattere nullo per caratteri non estesi dalla funzione che elabora l'input come semplice ASCII . A seconda dell'algoritmo di hash stesso, del suo scopo e della lunghezza dell'input, questo potrebbe essere vantaggioso (ad esempio, per la sicurezza dell'hash delle password, ad esempio hashcat ha qualche problema con questi ), o causa una diminuzione dell'entropia della password, se questo fa sì che l'algoritmo di hashing ignori parti dell'input (ad esempio bcrypt , un'implementazione crittografica espansione del chiave basata su Blowfish codice a blocchi simmetrico, limita il testo in chiaro a 72, 55 o 51 caratteri - a seconda di chi lo chiedi - e ignora il resto).
Per quanto riguarda un consiglio generale sull'opportunità di includere i terminatori null negli input per gli algoritmi di hashing, non ne ho e dovresti essere un po 'più specifico sull'uso previsto per il quale stai usando i dati di hashing (stiamo parlando di hashing crittografico per l'archiviazione della password o HMAC qui?), e varierà molto a seconda delle tue esigenze specifiche e dell'algoritmo di hashing scelto.
Rischio un'ipotesi selvaggia: non dovrebbe. Un valore stringa, ed è un terminatore nullo, sono due cose diverse.
La terminazione null potrebbe essere qualcos'altro su un'altra macchina / OS / compilatore, ma il valore dovrebbe rimanere lo stesso.
Quindi suppongo che MD5 non stia prendendo in considerazione il modo in cui la stringa è archiviata su quella particolare macchina, e quindi solo MD5 la stringa "valore" (o contenuto), e non la sua rappresentazione completa della macchina.
(su una nota leggermente correlata: vedi il C-faq per approfondimenti sul perché non puoi assumere nulla sulla rappresentazione interna . In C, ma può essere esteso a quasi tutto. è un buon esempio, nel C-faq, per il puntatore nullo, che può essere trattato come '0' in molti casi nei programmi C, ma che potrebbe essere qualsiasi cosa internamente (vedere alcuni esempi: < a href="http://c-faq.com/null/machexamp.html"> link ). E qui, parliamo di un md5 (o altro) di una stringa, quindi dovrebbe essere programma / OS / qualsiasi dipendente, e poichè la rappresentazione interna può cambiare, deve essere sul valore della stringa e non includere il suo terminatore di memoria).
Leggi altre domande sui tag terminology hash md5