[Python] Ma python3 non doveva aver risolto il problema dell'unicode?

Gollum1 gollum1.smeagol1 a gmail.com
Mar 2 Lug 2013 20:12:46 CEST


Il 02 luglio 2013 20:06, Gollum1 <gollum1.smeagol1 a gmail.com> ha scritto:
> ciao [],
>
>    voglio calcolare l'md5 di un file (mi serve solo come firma, non
> come criptazione, quindi va benissimo l'md5)...
>
> uso il classico loop:
>
>         fi = open(file_name, "r")
>         lines = fi.readlines()
>         fi.close()
>
>         buffer_digest = hashlib.md5()
>         for line in lines:
>             buffer_digest.update(line)
>             calculate_digest = buffer_digest.hexdigest()
>
> quando lo usavo su python 2.7 funzionava perfettamente, ora invece con
> python 3.2 ottengo il seguente errore:
>
> TypeError: Unicode-objects must be encoded before hashing
>
> il bello è che il file è generato dallo stesso programma in un'altra
> parte, e anche in quell'occasione è firmato... ma non da errore... il
> codice è lo stesso...
>
> Byez
> --
> Gollum1
> Tesssssoro, dov'é il mio tessssoro...

rettifico... nella creazione del file uso il seguente codice, che non
da problemi, ma non credo che cambi la sostanza:

        # Calcolo il digest del file e lo inserisco nel file stesso.
        digest = hashlib.md5(open(self.HSH_file_name, 'rb').read()).hexdigest()
        fo = open(self.HSH_file_name, "a")
        print(hshseparator, file=fo)
        print(digest, file=fo)
        fo.close()

nella decodifica in realtà elimino le ultime 4 righe, perché la firma
è fatto sul file senza queste ultime 4 righe, che contengono poi la
firma stessa.

Non credo che ci sia a priori qualcosa che mi permetta di sapere
quante righe ci sono nel file, e quindi leggere solo l'ultima per
prelevare la firma, e poi passare alla libreria md5 tutte le altre
righe, ed esclusione delle ultime 4

Byez
--
Gollum1
Tesssssoro, dov'é il mio tessssoro...


Maggiori informazioni sulla lista Python