Ho bisogno di estrarre un digest 8 byte da una stringa di lunghezza variabile, quindi sto cercando un algoritmo che implementerò in c/C++. Che farà parte di una procedura di firma digitale su un microcontrollore, quindi deve essere:Algoritmo di funzione hash 8 byte leggero
- scrivibile in poche righe di codice, dal momento che il firmware deve essere mantenuto il meno possibile;
- basso consumo di risorse, specialmente ram (preferibilmente inferiore a 100 byte);
- abbastanza forte che la modifica di un singolo carattere in qualsiasi punto della stringa cambierebbe il riassunto complessivo.
Ho dato un'occhiata agli algoritmi esistenti come crc64 ma sembrano essere troppo pesanti per la mia piattaforma.
Ci sono molte funzioni di hash disponibili (e facilmente reperibili). Quali funzioni esistenti hanno guardato "vicino" all'obiettivo desiderato e perché? Se non erano accettabili, perché? Ci sono una serie di buoni risultati/lettura per una semplice "funzione hash C" - onestamente, solo il 3 ° requisito postato sembra di qualsiasi interesse. Inoltre, poiché è stato menzionato il CRC, l'obiettivo è un [generale] * hash * o un * checksum *? –
Forse questo può essere utile: http://en.wikipedia.org/wiki/List_of_hash_functions Forse controlla anche sphlib ma per chiarire qualcosa 8 byte provocheranno collisioni quindi il punto 3 dei tuoi requisiti non può essere soddisfatto da QUALSIASI hashing algoritmo almeno non per tutte le stringhe e 8 byte è piuttosto basso. –
@pst: ho preso in considerazione alcune delle funzioni di hash esistenti che forniscono un output a 64 bit, ma per esempio il crc64 ha bisogno di molto più di 100 byte di ram. Come ho affermato nella domanda, l'obiettivo è ottenere un digest di messaggi, quindi una funzione di crittografia sarebbe meglio. Tuttavia, ho bisogno che sia leggero più che forte, quindi ho preso in considerazione anche altre funzioni di hash. – etuardu