Dzień dobry, Dlatego stworzyłem skrót MD5 z pliku TXT. Po zmianie zawartości pliku wstawiającej nowe wartości ponownie próbowałem utworzyć skrót MD5, ale wartość się nie zmieniła. Co mogłem zrobić?
Mój kod:
from hashlib import md5
open_file = open("N0003966.290", "r", encoding="ISO-8859-1")
file = open_file.read().lower().rstrip("nr ").strip("nr")
m = md5()
m.update(b"file")
print(m.hexdigest())
Muszę spełnić pewne wymagania, aby zbudować ten skrót, taki jak:
- Regułą kodowania musi być „ISO-8859-1”
- Wszystkie postacie muszą być małe litery
- Nowe znaki linii i znaki powrotu karetki NIE mogą być brane pod uwagę w budynku mieszania
Odpowiedzi:
1 dla odpowiedzi № 1Dzwonisz update
na sznurku "file"
zamiast zawartości pliku. Zrób to zamiast tego:
from hashlib import md5
open_file = open("N0003966.290", "r", encoding="ISO-8859-1")
file_content = open_file.read().lower().rstrip("nr ").strip("nr")
m = md5()
m.update(file_content.encode("ISO-8859-1"))
print(m.hexdigest())
Zauważ także, że zastępuję twoją zmienną file
przez file_content
(niewłaściwą praktyką jest nadpisywanie wbudowanej nazwy).
1 dla odpowiedzi nr 2
m.update(b"file")
Ta linia jest problemem. Wywołujesz funkcję na łańcuchu „plik” przedstawionym jako bajty (patrz to pytaniena przykład więcej o tym, co to oznacza), a nie o dane w pliku.
Jeśli go zastąpisz
m.update(file)
powinieneś uzyskać pożądane wyniki (chociaż, jak wskazuje DevShark, powinieneś także zmienić nazwę tej zmiennej na coś, co nie ma już własnego znaczenia).
0 dla odpowiedzi № 3
m.update(file.encode("ISO-8859-1"))
0 dla odpowiedzi nr 4
Ten kod działa również w pythonie 2.7.
from hashlib import md5
open_file = open("a.txt", "r")
file = open_file.read().lower().rstrip("nr ").strip("nr")
m = md5()
m.update(file)
print(m.hexdigest())
m.update(b"file")
to miejsce, w którym wystąpił błąd, zastąp go błędem m.update(file)
.