|
Що е то хеширане и за какво се използва.
Още една магическа дума - "хеш". :) Тази статия се появи в резултат от една дискусия на форума в която стана ясно, че всички са чували думата, но малко от начинаещите програмисти знаят какво точно означава и каква полза можем да имаме от тези техники в програмирането. Основната цел на статията е да изясни на начинаещите същността на нещата. От там нататък е много лесно да се намерят подробности и конкретни реализации използвайки <A HREF="http://www.google.com" TARGET="_blank" class="grau_normal">Google</A>. На английски: "hash, hashing". Превежда се буквално като "кълцам" или "бъркотия". Понякога се използва: "message digest", което може да се преведе буквално като "смляно съобщение" или "извлечение от съобщение". Друг път ще го срещнете като "digital fingerprint" - буквално, цифров пръстов отпечатък. Какво обаче означава това, отнесено към компютрите и информатиката? Най-общо хеширащите алгоритми получават на входа си някаква поредица от данни с произволна дължина - най-често стринг от символи, но може да са и други данни, а на изхода се получава едно число или стринг с фиксирана дължина, което характеризира "уникално" цялото входно съобщение. Пиша "уникално" в кавички, защото както ще видим по-нататък това не е точно така. За да стават нещата по-ясни, по-нататък в статията ще предполагаме, че входните данни са текстов стринг, а изходната стойност е число. За един добър хеширащ алгоритъм е задължително да отговаря на няколко условия: 1. Да е необратим - тоест да не съществува алгоритмичен начин за възстановяване на изходният стринг от хеш стойността. (Казвам "алгоритмичен", защото винаги съществува начина с "груба сила" - тоест изброяваме всички възможни комбинации от входни данни и пробваме за всяка от тях докато намерим решението.) 2. Да дава възможно най-равномерно разпределение на стойностите в допустимият диапазон, за типичните представители навходният стринг. Най-общото правило тук е, че при малки разлики във входните стрингове, хеш функцията трябва да дава големи разлики във изходните си стойност. По това свойство, хеш функциите много приличат на генераторите на случайни числа. 3. Хеш функцията трябва по възможност да се изпълнява бързо. Това не е абсолютно задължителност, но повече скорост никога не вреди. ;)
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||









