Помогни ни да направим Uroci.net по - богат! Добави урок

PHP - част 12 (Кодиране и хеширане на данни)

PHP » PHP
fix3d   трудност:    видян: 12224



Кодиране в PHP

От предишните уроци се научихте да работите с MySQL, в тази секция ще ви покажа, как можете да използвате кодиращите функции, предоставени от MySQL.

Един от най-лесните методи за кодиране в PHP е използването на функциите encode() и decode(), предоставени от MySQL. Тези функции се използват съответно за кодиране и декодиране на текстови данни, като например пароли.

Синтаксисът на функцията encode() e :
string encode ( string низ, string парола )

Функцията encode() приема два параметъра. Първият е низът, който трябва да се кодира, а вторият параметърът на паролата.

Синтаксисът на функцията decode() e :
string decode ( string низ, string парола )

Функцията decode() също приема два параметъра. Първият аргумент е низът, който трябва да се декодира, като за парола се използва вторият аргумент. Първият низ, трябва да е низ, върнат от функцията encode().

Разгледайте следния код:

// Използване на функцията encode на MySQl за кодиране на пароли
$mingle = "encode('$password', '$password')";
$sqlquery = "INSERT INTO login VALUES ('$id', '$mingle' )";

В горния код се използва функцията encode за кодиране на въведената парола. След това кодиранаа парола се съхранява в базата данни, която която съдържа ID и паролите на потребителите.


Хеширане

Въпреки, че кодирането подсигурява данните ви в значителна степен, хеширането подсигурява максимална сигурност за данните ви, особено в случаите на пароли. При хеширането се генерира хеш стойност за данните, който трябва да се подсигурят. За целта се използва хеш функция. Данните след това се кодират и хеш стойността се съхранява ( или изпраща на получателя ) заедно с кодираните данни. Когато данните трябва да се декодират, освен тях, трябва да се декодира и хеш стойността. Освен това се генерира друга хеш стойност и двете стойности трябва да съвпадат. Ако съвпадат, е сигурно, че данните не са променени.

Разгледайте израза „ A mod B = C“. В този случай стойността С се получава, като се раздели A на B. Ако просто имате стойността C, не можете да направите предложение за оригиналните стойности A и B, защото има безброй много комбинации от числа, които ще дадат същия резултат!

Да разгледаме друг пример. Да предположим, че трябва да хеширате низа „SECRET“. Решавате, че ще използвате съответните ASCII стойности на символите в низа.

S = 83
E = 69
C = 67
R = 82
E = 69
T = 84

-------

454

След събирането се получава числото 454, което е хеш стойността. Ако ви се даде числото 454, не може да се разгадае оригиналния текст от това число, дори и да знаете, че това число се е получило от събирането на ASCII стойностите. Много други низове ще доведат до същата стойност. Например TECRES, CESTER, или всяка друга пермутация на буквите ще даде хеш стойност 454. Виждате, че дори и да промените позицията на буквите, хеш кода ще е същия. За да избегнете това, можете да умножите ASCII стойността на всеки символ с позицията му в низа. В този случай, позициите на всеки символ са:

Позиция : 123456
Текст : SECRET

Сега да умножим позицията на всеки символ в низа с неговата ASCII стойност:

( 83 * 1 ) + ( 69 * 2 ) + ( 67 * 3 ) + ( 82 * 4 ) + ( 69 * 5 ) + ( 84 * 6 )

Сега нека да съберем стойностите, за да получим новата хеш стойност. Ще получите следния резултат:

83
138
201
328
345
504

-----

1599

Сега новата хеш стойност е 1599 и е трудно да се разбере, как е била генерирана!

Нека да видим как хеширането е полезно при съхраняване на пароли. Да предположим, че генерирате хеш стойност за всяка парола и я съхранявате в базата данни. Дори и ако хакерът успее да получи достъп до базата данни и свали всички хеширани пароли, няма начин да открие оригиналната стойност от хеш стойността!

Но как можете да извличате оригиналната парола от хеш стойността при нужда, или пък, как ще се идентифицират потребителите на базата на хешираните пароли в базата данни? Отговорът е, че ще сравнявате хеш стойностите. Хеширането работи по различен начин от кодирането, при което паролите, съхранени в базата данни, трябва да се декодират явно и да се сравняват с въведената от потребителя парола. При хеширането, първо се прочита хеш стойността и се сравнява хеш стойността, генерирана от паролата на потребителя. След това, ако двете пароли съвпадат, това означава, че потребителя е въвел правилна парола.

За нашия пример за дума SECRET получихме стойността 1599, която може да се получи за много други думи. Много трудно може да се намери алгоритъм, който да генерира уникални стойности – или поне стойности, които много рядко да съвпадат и да не може да се декодират. Един такъв алгоритъм е MD5.


Използване на MD5 хеширане в PHP

Разработен от RSA Data Security, Inc., Message Digest 5 ( MD5 ) е хеширащ алгоритъм, който генерира 128 битова уникална стойност. MD5 също така осигурява, че много трудно може да се генерира еднаква хеш стойност за различни данни. Когато използвате MD5, паролите се съхраняват като хеш стойност.

Във вашите PHP скриптове може да използвате МД5 хеширане чрез функцията md5(). Синтаксиса на функцията е следния :

string md5( string низ )

както можете да видите, функцията приема един аргумент – низ – чиято MD5 хеш стойност искате да намерите.

Тъй като кодирането и хеширането предлагат сигурност на различни нива, честа практика сред Web разработчиците е да реализират както кодиране, така и хеширане, за да постигнат по-висока степен на сигурност.


източник на урока: http://www4u.search.bg


Страници: «1 2

Сподели урока:



Регистрирайте се, за да добавите коментар


Калдейта Ком ЕООД - © 2003-. Всички права запазени.
Препоръчваме: IT Новини