Хеширане на пароли

+7 гласа
425 прегледа
попитан 2016 юни 14 от TTTodorov. (1,660 точки)

Всички знаем, че паролите се хешират. Интересно ми е каква е разликата между md5(), sha1() и crypt()? Коя е най-сигурна? Коя най-често се използва?

1 отговор

+1 глас
отговорени 2016 юни 14 от Nolongerexists2 (1,790 точки)
редактиран 2016 юни 15 от Nolongerexists2
md5()
MD5(Message Digest 5) 128-битови извличания. Като MD5 се използва в многобройни приложения за сигурност и безспорно е най-популярната функция. Ето как изглежда едно хеширане на парола.

md5('123');
202cb962ac59075b964b07152d234b70

Тук вие можете да влияете на хеша като добавите някакви букви/символи/цифри.

md5('123'.'x1x2x3');
35c42f8bc472414de4de708e7ebd115c

sha1()
SHA-1(Secure Hash Algorithm) е може би за сега най-сигурната функция за хеширане превръща текст с дължина до 264-1 бита в 160-битово извлечение представено като четиридесетцифрено шестнадесетично число. Ето по какъв начин sha1() хешира нашата парола.

sha1('123');
40bd001563085fc35165329ea1ff5c5ecbdbbeef

При sha1() вие отново можете да си създавате схеми като при md5()

sha1('123'.'x1x2x3');
c807dc901fc9f7a96e1af2c040421fd843b57d2f

За SHA-1 все още не са създадени реални колизии които да могат да декриптират хеша.

crypt()
crypt е малко по-различна хеш функция от md5() и sha1(). Тази функция използва UNIX DES алгоритъм. Хеша също изглежда доста по-различно и тук трябва да се въведе string и salt.
string - Текста който ще се хешира
salt  - текст, на базата на който ще се извършва хеширането. Ако salt е зададен хеширането ще се извърши само веднъж, а ако не е зададен то паролата се генерира постоянно ако презареждате страницата.
Пример : crypt('string','salt')

crypt('123','xx')
xxC9TW3tQXUUk

Написах код който ще хешира '123' като първите букви/символи от нашият код ще бъдат 'xx'
Ако сменим и напишем вместо 'xx' - 'x2' то тогава и целият хеш ще бъде променен

crypt('123','x2');
x2Mt6KxrO/3Co

По сигурност ги подреждам така :
1. sha1()
2. md5()
3. crypt()
коментиран 2016 юни 15 от code (2,460 точки)
В отговора се спомена за системите, но не се говори за сигурността. На практика може да се каже, че всички добре използвани хеширащи функции по-сигурната е тази, която вади по-дълъг резултат.

Иначе на теория сигурността на която и да е от системите е неизвестна. Може да се окаже (вярно с много малка вероятност - примернно много по-малка от 0,0000001%), че някоя от системите е напълно несигурна, ако да го кажем бъде намерен да го наречем  "бъг" в структурата й.

Между другото един важен показател на хеширащите функции е скоростта им!

Между другото думата "криптиране" е използвана погрешно в отговора. Трябва да се ползва точно думата "хеширане".  Криптиране е технология, при която обработения текст е възстановим по някакъв начин (чрез декриптиране). При хеширането целта е точно обратната (да не може да се възстанови)!
...