Шифриране и дешифриране на стрингове
Що е то криптография?
Действията шифриране и дешифриране се прилагат в много сайтове, особено в тези за електронна търговия. Често единственият начин да се защитят ценните данни е шифрирането им, т.е. да се преобразуват във форма, в която информацията трудно и практически почти невъзможно е да се разчете, без да се знае ключа. Паролите са данни, които винаги трябва да се шифрират. В зависимост от желаното ниво на безопасност, може да се шифрират и имената на потребителите, адреса на електронната поща и номера на телефона.
Темата за защита на информацията е сложна и обширна. Само шифрирането на данните не гарантира безопасността на уеб сайта. На първо място, полагайки определени усилия, данните винаги могат да се дешифрират. Сървърните технологии предлагат безопасност за данните едва, когато информацията постъпи в РНР модула на сървъра. Безопасността на данните, при движението им от компютъра до сървъра, трябва да се осигури с други методи.
Една от криптографските системи е PGP : http://www.symantec.com/products-solutions/families/?fid=encryption . Друга криптографска система е РНР функцията crypt () , която шифрира, но не дешифрира данните. Необходимото ниво на криптографска защита на вашия сайт може да се достигне с PHP библиотеката Mcrypt:
http:/mcrypt.hellug.gr/
http://mcrypt.sourceforge.net/
като конфигурирате РНР да поддържа mcrypt. Използването на тази библиотека ви позволява да ползвате функцията mcrypt (), която може да шифрира и дешифрира информацията.
http:/mcrypt.hellug.gr/
http://mcrypt.sourceforge.net/
като конфигурирате РНР да поддържа mcrypt. Използването на тази библиотека ви позволява да ползвате функцията mcrypt (), която може да шифрира и дешифрира информацията.
Криптографията, както вече казах, е част от решенията, които трябва да се вземат за сигурността, тъй като тя се прилага след постъпване на данните на сървъра. На сайта трябва да се използва и протоколът SSL (протокол за безопасно свързване)- начин да защитите обменената информация между клиента (уеб браузъра) и сървъра. По SSL могат да се изпращат и бисквитки (cookie), задавайки съответните параметри при използване на функцията setcookie ().
Паролите трябва винаги да са шифрирани. Ако сървърът ви не поддържа функцията mcrypt (), ползвайте crypt () за шифриране на паролите, въведени по време на автентикация, след това проверявайте за съответствие.
Няколко препоръки за писане на безопасен РНР код
- Преместете файловете с критична информация извън кореновата директория на уеб документите (всяко сървърно приложение използва по подразбиране кореновата директория за съхранение на уеб документите). Файловете, които се намират в тази директория, могат да бъдат достъпни чрез URL от всеки браузър. Не е толкова просто да се разгледат файловете, намиращи се извън кореновата директория на уеб сървъра. Тях можете спокойно да ги включите в РНР, например:
require ( " . . / secure.php " ) ;
Този ред ще позволи да се включи файл secure.php, съхраняващ се в директория, която се намира с едно ниво над текущата директория. Този файл е недостъпен директно от Интернет, тъй като е разположен извън кореновата директория на уеб документите. - Втората препоръка се отнася за данните, които потребителите въвеждат в HTML формите. При предаване на информация, която не бива да бъде прихваната, е необходимо винаги да използвате метода POST , тъй като методът GET добавя данните, които се предават към URL, като ги прави видими в прозореца на браузъра. Не е правилно, но някои хора могат да изпратят чрез HTML форма Java Script или код за изпълнение на вашия сайт. Този код може да получи критична информация, да внесе изменения в базите данни и т.н. Да предотвратите това не е толкова сложно, ако проверявате входящите данни с помощта на регулярни изрази.
Още по въпроса за безопасност:
http://www.cert.org/
http://www.w3.org/Security/
http://www.cert.org/
http://www.w3.org/Security/
Функцията crypt () се прилага за криптиране на данните, но с нея не можете да ги декриптирате. Ако с помощта на тази функция зашифрирате паролата и я съхранявате в този й вид, то възвръщането на първоначалният й вид е невъзможно. Когато потребителят отново посети сайта и въведе парола, паролата се шифрира повторно и двете шифрирани версии се сравняват.
Синтаксисът на функцията е следния:
Синтаксисът на функцията е следния:
string crypt ( string $str [, string $salt ] )
Функцията ще върне криптиран стринг, използвайки стандарта Unix DES-базиран, Blowfish или MD5 алгоритми, налични в системата. Точният алгоритъм зависи от дължината и формата на параметъра $salt. Параметърът $salt не е задължителен.$salt е стринг, който служи за увеличаване на броя на кодираните знаци, за да направи кодирането по-защитено. Ако параметърът $salt липсва, той ще се генерира случайно от PHP, но тогава функцията crypt () ще създаде слаба парола.
Има и константи, които се използват заедно с функцията crypt (). стойността на тези константи (0 или 1) се поставя от РНР, когато се инсталира, в зависимост от това дали даден хеширащ тип е наличен или не:
http://crypt.onlinephpfunctions.com/
http://crypt.onlinephpfunctions.com/
Шифриране на данните с помощта на функцията crypt ()
- Отворете файла HandleForm.php в текстовия редактор.
- Сложете знака за коментар (или изтрийте) редовете, където е използвана функцията urlencode () и добавете следните два реда:
//Криптира стойността на променливата $firstname $CryptName = crypt($firstname); print ( "Това е криптирана версия на вашето име: <b>$CryptName<b>". "!"."<br>" ) ; $link = "welcome.php"; // Декларира променливата $link echo "Кликни"." "."<a href='".$link."'>тук</a>"." ". ",за да видиш специалния си поздрав!"."<br>";
Ето и как ще изглежда файлът HandleForm.php:
<!DOCTYPE html> <html> <head> <title>Резултати от формата</title> <meta http-equiv="Content-Type" content="text/html"; charset="UTF-8"> </head> <body> <?php session_start();//стартира се сесия /*Тази страница получава и обработва данните от „form.html” */ if (isset($_POST['submit'])) { $firstname = $_POST['firstname']; $lastname = $_POST['lastname']; $email = $_POST['email']; $comments = $_POST['comments']; //Съхранява стойността на променливата $firstname $_SESSION['firstname']= $_POST['firstname']; //Следващите четири реда служат за премахване //на евентуални интервали в променливите //$firstname, $lastname, $email и $comments trim ($firstname); trim ($lastname); trim ($email); trim ($comments); echo ('Здравейте, ' . htmlspecialchars($firstname) . '!' . "<br />\n"); echo ('Вашата фамилия е: ' . htmlspecialchars($lastname) . "<br />\n"); echo ('Вашият имейл е: ' . htmlspecialchars($email) . "<br />\n"); echo ('Вашият коментар е: ' . htmlspecialchars($comments) . "<br />\n"); //Показва как ще се кодира променливата $firstname //echo ('Променливата ще се кодира така:'. ' ' . urlencode(trim ($firstname))."<br />"); //Кодира променливата $firstname и ви препраща //към страницата welcome.php //echo "Кликни"." ".'<a href="welcome.php?name=' //, urlencode(trim ($firstname)), '">тук</a>'." "." //,за да видиш специалния си поздрав!"."<br>"; //Криптира стойността на променливата $firstname $CryptName = crypt($firstname); print ( "Това е криптирана версия на вашето име: <b>$CryptName<b>"."!"."<br>" ) ; $link = "welcome.php"; // Декларира променливата $link echo "Кликни"." "."<a href='".$link."'>тук</a>"." ". ",за да видиш специалния си поздрав!"."<br>"; } session_write_close (); //Пише сесийните данни и завършва сесията ?> </body> </html>
Резултатът в браузъра ще е:

Скриптовете могат да се оптимизират, допълнят, преработят според вашите изисквания и потребности.
Аналог на функцията crypt () е функцията md5 () . В скрипта можете да замените crypt () с md5 () и да тествате как работи.
За да разберете дали сървърът ви поддържа конкретна функция, е необходимо просто да я извикате. Ако функцията не се поддържа, ще получите съобщение за грешка. Преди да направите заключение, обаче, че сървърът ви не поддържа съответната функция, е необходимо внимателно да проверите скрипта за правописни и синтактични грешки.
Ето и съобщение, което се извежда в браузъра, ако сървърът не поддържа функцията encrypt (), например:
За да разберете дали сървърът ви поддържа конкретна функция, е необходимо просто да я извикате. Ако функцията не се поддържа, ще получите съобщение за грешка. Преди да направите заключение, обаче, че сървърът ви не поддържа съответната функция, е необходимо внимателно да проверите скрипта за правописни и синтактични грешки.
Ето и съобщение, което се извежда в браузъра, ако сървърът не поддържа функцията encrypt (), например:

Бъдете внимателни и не бъркайте кодиран с шифриран скрипт. Шифрирането се използва с цел безопасност и прави текста абсолютно нечитаем. Кодирането заменя само определени символи със символи, приемливи за URL.
Създаване на генератор за пароли в РНР
- Отворете текстовия редактор и създайте нов документ с наименование passwords.php.
- Въведете следните редове:
- Съхранете файла и тествайте.
<!DOCTYPE html> <html> <head> <title>Генератор за пароли</title> <meta http-equiv="Content-Type" content="text/html"; charset="UTF-8"> </head> <body> <?php $string = "Това е текстът, който ще бъде криптиран,<br> така че да създадем произволни и по-защитени пароли!"; ?> </body> </html>
Можете да поставите какъвто искате стринг, конкретния текст няма значение за нашите цели. Този текст ще се шифрира за създаване на случайни стрингове от които се взема паролата.
$length = 8; // Определя дължината на паролата
Можете да променяте стойността на дължината ($length) на паролата.
$string = md5($string);
Функцията md5() прилича на crypt() , но генерира стрингове до 32 знака.
$stringlength = strlen ( $string );
За да извлечем подстринг, е необходимо да знаем дължината на шифрирания стринг, поради което използваме функцията strlen(), която определя броя символи в стринга. Известно е, че при използване на md5(), стринга винаги се състои от 32 знака и въпреки това е добре да се постави и функцията strlen(). По-късно, ако приложите функцията encrypt(), вместо например, md5() , скриптът ще работи по-правилно.
srand ((double) microtime() * 1000000);
$begin = rand ( 0 , ( $stringlength - $length - 1 )) ;
Необходимо е да определим изходната позиция за функцията substr() . Функцията rand() създава случайно число между минимума (тук е 0) и максимума. Не забравяйте преди това да използвате функцията srand(), в противен случай няма да получите случаен резултат от rand(). Максимумът е равен на дължината на стринга, минус дължината на паролата, минус 1. Правим това, защото, ако шифрирания стринг се състои от 32 символа, а паролата от 8, то можем да използваме функцията substr() и да получим парола от 8 символа максимум с 24 позиции или отчитайки, че номерацията започва от 0, с 23 индекса.
Последната крачка е да накараме функцията substr() да извлече подстринг с необходимата дължина, започвайки от изчислената позиция:
$password = substr($string, $begin, $length);
Променливата $password е равна на подстринга, получен от променливата $string, започваща с индексната позиция на $begin и продължаваща $length на брой символа.
echo ("Вашата препоръчителна парола е:$password \n");
Ето и съдържанието на целия файл passwords.php:
<!DOCTYPE html> <html> <head> <title>Генератор за пароли</title> <meta http-equiv="Content-Type" content="text/html"; charset="UTF-8"> </head> <body> <?php $string = "Това е текста, който ще бъде криптиран, така че можем да създадем произволни и по-защитени пароли!"; // Определя дължината на паролата $length = 8; //Шифрира паролата $string = md5($string); //Дължината на зашифрирания стринг $stringlength = strlen($string); srand ((double) microtime() * 1000000); $begin = rand ( 0 , ( $stringlength - $length - 1 ) ) ; $password = substr($string, $begin, $length); echo ("Вашата препоръчителна парола е: <p><big>$password</big>\n"); ?> </body> </html>
Резултатът в браузъра:

|
Няма коментари:
Публикуване на коментар