Всеки, по един или друг начин свързан с IT е чувал за MD5 и SHA1 хешовете. Тези хешове често се поставят до файловете за изтегляне и служат за проверка на верността на изтегления файл. Хеш-функциите се използват за удостоверяване целостта на данните (Message Detection Codes – MDC), за удостоверяване на източника (Message Authentication Codes – MAC), за електронно подписване на документи, за криптографски цели и други. Хеш-функцията получава на входа си съобщение (това съобщение може да е няколко гигабайтов файл), а на изхода извежда кратко число – хеш. Целта на хеш-функцията е да изчисли за различните съобщения различни хешове. Дължината на съобщението е произволна и може да бъде дори и нулева, докато дължината на хеша е винаги еднаква – например 128 бита за MD5. Очевидно е, че съобщенията на практика са изключително много, а 128-битовите числа са сравнително малко и неизбежно ще има най-малко две съобщения с еднакъв хеш. Намирането на подобни съобщения с еднакъв хеш е изключително трудно и изисква много компютърно време. Нека да разгледаме MD5 и SHA1 алгоритмите за намиране на хеш и да се опитаме да ги оптимизираме с цел – максимална бързина на изпълнение.