funzione hash non crittografica con output che cambia tanto quanto l'input [chiuso]

2

Il modo in cui conosciamo gli errori (crittografici) è in gran parte che sono totalmente diversi se l'input viene modificato solo per l'importo minimo.

md5('This is some boring string to test with')    // d546c64928a28b5f605610a919680907
md5('This is another boring string to test with') // a74c1d74da495895bf48056ac979723a

Qui vedi che l'hash è completamente diverso, anche se ho cambiato solo una parola.

Quello che sto cercando è una funzione di hash che restituisce restituisce un output che è altrettanto simile, in quanto gli input sono simili e altrettanto diversi quanto gli input sono diversi

fn('This is some boring string to test with')     // 00dd2171b47cc2748c2874c42284737
fn('This is another boring string to test with')  // 01ed2371b47cc5748c2874c42284738
fn('The quick brown fox jumps over the lazy dog') // 27bc27999aa2c3c2452cff234feee21

Guarda come i primi due hash sono abbastanza simili, ma il terzo è completamente diverso.

Non voglio un semplice meccanismo di controllo degli errori in grado di rilevare piccole modifiche (come il CRC). Voglio essere in grado di verificare se due hash hanno molto probabilmente l'origine di un look-a-like, osservando che anche gli hash sono simili al look.

Il mio obiettivo è capire se è possibile avere degli hash di due (effettive) impronte digitali e quindi basarsi solo sugli hash concludere se le impronte digitali originali erano probabilmente dello stesso dito.

Molto tempo fa, una volta ho appreso che tali funzioni esistono.

Qualcuno può dirmi che nome hanno questi tipi di hash e quali sono alcuni esempi?

    
posta nl-x 03.10.2017 - 17:38
fonte

1 risposta

0

Non sono sicuro se esistono degli hash esistenti che lo fanno. La ragione per cui quando venivano sviluppati gli hash, il requisito che ogni cambiamento negli input avrebbe creato un grande cambiamento nell'output era un requisito fondamentale di un hash. Detto questo, posso proporre un modo per farlo.

Un esempio potrebbe essere un hash che conta solo le occorrenze di ogni lettera nell'input. Per semplificazione diciamo che questo hash prende solo caratteri alfabetici minuscoli. Quindi la lunghezza dell'hash sarà 26. Ogni posizione nell'hash si riferirebbe a un personaggio diverso. Quindi la prima posizione totalizzerebbe tutte le a, la seconda avrebbe il totale delle b ...

hello world

equivarrebbe a

00011001000300200100000000

perché non ci sono a, no b, no c, 1 d, ect

una modifica a

hello worlds

equivarrebbe a

00011001000300200110000000

L'unica differenza sarebbe il conteggio per la "s".

Ovviamente ci sono molti problemi con questo tipo, come si può avere un massimo di 9 istanze di ogni lettera, ma questo è solo un esempio per mostrare come un hash potrebbe mostrare piccole modifiche nell'output per piccole modifiche nell'input.

    
risposta data 03.10.2017 - 18:50
fonte

Leggi altre domande sui tag