Fowler-Noll-Vo FNV1a-32 Хэш кодын тооцоолуур
Нийтэлсэн: 2025 оны гуравдугаар сарын 19 20:57:18 (UTC)
Текст оруулах эсвэл файл байршуулахад үндэслэн хэш кодыг тооцоолохын тулд Fowler-Noll-Vo 1a 32 бит (FNV1a-32) хэш функцийг ашигладаг хэш кодын тооцоолуур.Fowler-Noll-Vo FNV1a-32 Hash Code Calculator
FNV-1a 32 битийн хэш функц нь Fowler–Noll–Vo (FNV) хэш функцүүдийн гэр бүлийн нэг хэсэг бөгөөд хэш утгын сайн хуваарилалтыг хадгалахын зэрэгцээ хурдан хэш хийх зориулалттай. Энэ нь ихэвчлэн хэш хүснэгт, шалгах нийлбэр, өгөгдөл хайх зэрэг програмуудад ашиглагддаг. Энэ нь 32 бит (4 байт) хэш код үүсгэдэг бөгөөд ихэвчлэн 8 оронтой арван арван тоогоор илэрхийлэгддэг.
FNV-1a хувилбар нь анхны FNV-1 функцээс илүү сайжруулсан, хамгаалалт сайтай хувилбар юм.
Бүрэн тодруулга: Би энэ хуудсанд ашигласан хэш функцийн тодорхой хэрэгжилтийг бичээгүй. Энэ нь PHP програмчлалын хэлэнд багтсан стандарт функц юм. Би зөвхөн вэб интерфэйсийг энд олон нийтэд нээлттэй болгох үүднээс хийсэн.
Fowler-Noll-Vo FNV-1a 32 бит Хэш Алгоритмын Тухай
Би математикч биш ч энэ хэш функцыг миний математикч биш нөхөд ойлгохуйц жишээг ашиглан тайлбарлахыг хичээх болно. Хэрвээ та шинжлэх ухааны зөв, аймшигтай тооны тайлбар хүсч байвал түүнийг хаа нэгтээ олох боломжтой гэдэгт би итгэлтэй байна ;-)
Эхлээд, FNV-1 алгоритмыг тусгай смүүти бэлтгэх жор гэж төсөөлөөд үзье. Та нэмэх бүрийн орц (жишээ нь жимс, сүү, эсвэл зөгийн бал) нь өгөгдлийн нэг хэсгийг илэрхийлдэг - үсэг, тоонууд, эсвэл бүр бүрэн файл ч байж болно.
Одоо зорилго нь эдгээр орцыг маш тодорхой аргаар холих бөгөөд ингэснээр жорын жижигхэн өөрчлөлт (жишээ нь нэг нэмэлт нэрс нэмэх) нь смүүтийг огт өөр амттай болгоно. Энэ бол хэш функцийн үйлчлэл - тэд өгөгдлийн тусгай бүлэг (эсвэл орц) бүрийн хувьд өвөрмөц "амт" (эсвэл хэш утга) үүсгэдэг.
FNV-1 алгоритм үүнийг хэрхэн хийдэг вэ гэвэл олон алхамтай процесс юм:
Алхам 1: Суурийг эхлэх (Offset Basis)
Үүнийг тусгай смүүтигийн суурийг блендерт хийгдэхтэй адил төсөөлөөрэй. Энэ суурь нь ямар орц нэмсэнээс үл хамааран үргэлж адилхан байдаг. FNV-1-д энэ нь "offset basis" гэж нэрлэгддэг - зүгээр л эхлэх тоо.
Алхам 2: Орцыг нэг нэгээр нэмэх (Өгөгдөл боловсруулалт)
Одоо та орцуудыг нэг нэгээрээ нэмэхээ эхлэнэ, жишээ нь ананас, дараа нь банана, дараа нь зөгийн бал. Эдгээр тус бүр нь өгөгдлийн нэг байтыг илэрхийлдэг.
Алхам 3: Нууц үржүүлэгчтэй холих (FNV Prime)
Орц бүрийг нэмсэний дараа та холигчийг асаадаг, гэхдээ энд нэг эргэлзээ байна: холигч нь бүх зүйлийг нууц "шидэт тоо" гэж нэрлэгддэг FNV prime-аар үржүүлдэг. Энэ нь зүйлсийг маш сайн холиход тусалдаг.
Алхам 4: Шидэт бага зэрэг нэмэх (XOR үйлдэл)
Дараагийн орцоо нэмэхийн өмнө та бага зэрэг шидэт тоос биеэрээ цацдаг (энэ бол XOR үйлдэл). Энэ нь амтыг таамаглаж болохгүй аргаар эргүүлдэг, жижигхэн өөрчлөлтүүд ч том өөрчлөлтүүдийг үүсгэдэгийг баталгаажуулдаг.
Алхам 5: Бүх зүйлийг боловсруултал давтана
Та шинэ орц бүрийг нэмсэний дараа холих ба шидэт тоос цацаж, бүх зүйлийг боловсруултал үргэлжлүүлнэ.
Алхам 6: Сүүлчийн Смүүти (Хэш Утга)
Та дууссаны дараа смүүтиг хийнэ. Сүүлийн амт (хэш утга) нь яг тэр орцын хослолд өвөрмөц байдаг. Хэрвээ та нэг ч нэмэлт нэрс нэмсэн бол тэр нь огт өөр амттай байх байсан.
Энд танилцуулсан хувилбар нь сайжруулсан FNV-1a 32 бит хувилбар юм. Хэрвээ та анхны хувилбарыг хүсвэл би түүнийг тооцоолууртай байдаг: Fowler-Noll-Vo FNV1-32 Хэш кодын тооцоолуур