Jak obliczyć CRC32 z Pythona, aby dopasować wyniki online?
Próbuję obliczyć/wygenerować skrót CRC32 z niektórych losowych ciągów za pomocą Pythona, ale nie pasują one do wartości generowanych przeze mnie ze źródeł online. To właśnie robię na moim komputerze,
>>> import binascii
>>> binascii.crc32('hello-world')
-1311505829
Inne podejście,
>>> import zlib
>>> zlib.crc32('hello-world')
-1311505829
Fakt, że powyższe wyniki są identyczne, mówi mi, że wywołuję funkcję poprawnie. Ale jeśli przejdę do następujących źródeł internetowych,
- http://www.lammertbies.nl/comm ... .html http://www.lammertbies.nl/comm ... .html
- http://crc32-checksum.waraxe.us http://crc32-checksum.waraxe.us//
- http://www.md5calc.com/ http://www.md5calc.com/(wybierz CRC32B z listy rozwijanej)
W przypadku ciągu „hello-world” wszystkie mają tę samą wartość = b1d4025b
Czy ktoś wie, co muszę zrobić, aby uzyskać odpowiednie wyniki?
Kiedy pisałem to pytanie, przyszło mi do głowy, że może być konieczne przekonwertowanie mojego wyniku Pythona na szesnastkowy.
>>> hex(zlib.crc32('hello-world'))
'-0x4e2bfda5'
Niestety to też nie pomogło. :(
Nie znaleziono powiązanych wyników
Zaproszony:
Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się
3 odpowiedzi
Anonimowy użytkownik
Potwierdzenie od:
Te witryny wykonują 32-bitowe CRC bez znaku.
W przeciwnym razie znaczenia są takie same, jak widać z tego:
Jednym z szybkich sposobów konwersji z 32-bitowej na 32-bitową liczbę całkowitą jest: *
<sup>
</sup>
Lub szesnastkowo:
lub lub , i tak dalej są równoważnymi sposobami wykonania tej samej rotacji bitów; wszystko sprowadza się do tego, który z nich jest najbardziej czytelny.
<sub>
* Działa to tylko w językach, które wykonują dzielenie liczb całkowitych w podłodze, takich jak Python ( ); w językach, w których dzielenie liczb całkowitych jest obcięte, np. Java ( ), nadal otrzymujesz liczbę ujemną. A w językach, które nawet nie wymagają Split i Mod do prawidłowego dopasowania, jak C, wszystkie zakłady są anulowane - ale w C po prostu rzucasz bajty na właściwy typ
</sub>
…
Anonimowy użytkownik
Potwierdzenie od:
https://docs.python.org/3/libr ... crc32
sugeruje użycie następującego podejścia „w celu wygenerowania tej samej wartości liczbowej we wszystkich wersjach i platformach Pythona”.
Wynik to zgodnie z oczekiwaniami.
Anonimowy użytkownik
Potwierdzenie od:
Próbowałem użyć modułu z 2 ^ 32 i dawał taką samą wartość jak te strony.