[Python] Ringraziamenti e dubbi sul SHA-1

Manlio Perillo manlio.perillo a gmail.com
Mar 14 Lug 2015 16:48:01 CEST


2015-07-11 8:07 GMT+02:00 Andrea D'Amore <and.damore a gmail.com>:

> [...]


>
> >> Qual è la differenza con il caso di stringhe Python e Java, entrambe
> >> immutabili?
>
> > Mi riferivo a tutt'altra cosa, quando parlavo di oggetti immutabili.
> > Gli oggetti che git gestisce (e.g. tree, blog, commit) non hanno nulla a
> che
> > fare con la rappresentazione delle stringhe nei vari linguaggi di
> programmazione.
>
> > Gli oggetti di git sono immutabili nel senso che una volta aggiunto, ad
> > esempio, un file (blob) nel repository, questo file non può più essere
> modificato.
>
> L'OP ha spiegato che vuole confrontare due stringhe in Py e Java con
> SHA-1, come git.
> Tu gli hai risposto che potrebbe non essere il modo migliore per le
> stringhe, immediatamente dopo aver evidenziato esplicitamente che nel

caso di git gli oggetti trattati sono immutabili. Questa vicinanza
> suggerisce che usare SHA-1 nelle stringhe non è il modo migliore
> perché non sono immutabili, cosa che non è vera.
>
>
Quello che volevo dire è che se vuoi confrontare due oggetti A e B, fare
hash(A) == hash(B) normalmente è conveniente solo se A è immutabile, come
accade
in git dove A ad esempio è un oggetto blog dentro il repository.
In questo caso hash(A) lo devi calcolare solo una volta.

Ho usato stringa invece di oggetto perchè l'OP parlava di stringhe.

La mia domanda è quale sia la differenza nei due scenari, non mi è
> chiara la tua risposta alla mia domanda, mi sembra parli d'altro.
> Senza sapere altro sullo scenario dell'OP, cioè se ad esempio deve
> confrontare due stringhe al mese o duecentomila al minuto, direi che
> se vuole confrontare due stringhe "di grosse dimensioni" (magari dei
> testi scritti in linguaggio naturale da un utente umano e non dei
> tentativi specifici di avere una collisione) può farlo tranquillamente
> con SHA-1.
>
>
Se dovessi confrontare oggetti di grosse dimensioni (non parliamo di
stringhe, perchè rappresentano testo
mentre qui in generale conviene parlare di bytes) io partirei con farlo nel
modo semplice, ossia confrontando
i vari chunks di 4kb o 8kb.

Se i due oggetti sono su computer diversi, come nel caso dell'OP, questo
approccio non diventa più conveniente.
Però invece di confontare l'SHA-1 calcolato sugli interi oggetti, io
confronterei l'SHA-1 calcolato sui singoli chunks.

Il problema di usare una funzione di hash, però, resta quello che hash(A)
== hash(B) non garantisce che
A == B.

> [...]

Ciao  Manlio
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20150714/e1bb00b5/attachment.html>


Maggiori informazioni sulla lista Python