Поиск

Шифрование и дешифрование строк

Операции шифрования и дешифрования используются на большинстве сайтов, особенно тех, через которые ведется электронная торговля. Часто единствен ный способ защитить ценные данные зашифровать их, то есть преобразовать в форму, в которой информацию трудно, порой практически невозможно рас познать, не зная ключа. Пароли представляют собой данные, которые всегда необходимо шифровать. В зависимости от желаемого уровня безопасности можно также кодировать имена пользователей, адреса электронной почты, номера телефонов.

Заметим, однако, что тема защиты информации сложна и обширна. Мы не будем останавливаться на вопросах надежности многих сопутствующих про грамм и самого сервера. Только шифрование данных не гарантирует безопас ности Webсайта. Вопервых, приложив определенные усилия, зашифрованные данные иногда удается взломать. Вовторых, будучи серверной технологией, РНР может обеспечивать безопасность только после поступления информации в PHPмодуль на сервере. Безопасность данных, находящихся в пути между ком пьютером пользователя и сервером, надо обеспечивать другими методами. В приложении В вы найдете дополнительную информацию и ссылки на ресур сы по этому вопросу.

В данном разделе представлены три функции для шифрования и дешиф рования строк. Одна из них будет продемонстрирована в действии и включе на в сценарий.

Первая функция crypt (.) может использоваться для кодирования дан ных, но расшифровать их обратно не удастся. Если зашифровать с помощью этой функции пароль и хранить его в таком виде, то первоначальное значение пароля восстановить практически невозможно. Тем не менее даже эта функция одностороннего шифрования может быть использована в целом ряде случаев. Например, в Webприложении она применяется для шифрования пароля поль зователя при регистрации. Потом, когда пользователь еще раз входит в систе му, вводимый им пароль снова шифруется, а две зашифрованные версии срав ниваются. Синтаксис функции выглядит следующим образом:

$Data = crypt($Data);

Еще две функции, которые связаны с шифрованием, это encrypt ( ) и вы полняющая обратное действие decrypt () (обратите внимание на то, что crypt ( ) и encrypt ( ) две разные функции). Для использования этих функций в PHPмодуле должны быть установлены соответствующие расширения. К со жалению, в вопросы шифрования довольно грубо вмешиваются власть и поли тика. В США действуют ограничения па экспорт технологий шифрования и защиты информации, и две только что упомянутые функции подпадают под дей ствие этих ограничений. Не удивляйтесь, если функции encrypt ( ) и decrypt ( ) не поддерживаются на сервере вашего провайдера. Тогда вам придется ограни читься только функцией crypt ( ) . Впрочем, находчивый программист всегда найдет способ обойти препятствия.

Шифрование данных с помощью функции crypt

  1. Откройте сценарий HandleForm.php в текстовом редакторе (листинг 5.4).
  2. Замените строки 15 и 16, где для передачи имени пользователя на страни цу welcome.php использована функция urlencode ( ) , на следующие:
  3. SCryptName = crypt($Name);
    print ("<P>This is the crypt{) version of your name: $CryntName\n"!;

    Нет необходимости зашифровывать URLзакодированную версию вашего имени, поэтому мы заменили данную часть сценария.

  4. Сохраните сценарий (листинг 5.6), загрузите его на сервер и протестируй те в браузере (рис.).
  5. Листинг 5.6 т Строки с функцией crypt ( ) добавлены только для демонстра ции ее работы. Хотя такое использование вряд ли актуально, пример показы вает, как шифрование работает со строками.

    1 <HTML>
    2 <HEAD>
    3 <TITLE>Form Results/Using Strings</TITLEx/HEAD>
    4 <BODY>
    5 <?php
    6 /* Эта страница получает и обрабатывает данные, принятые
    от "form.html". */
    7 $FirstName = trimf$FirstName);
    8 $LastName = trim($LastName). ;
    9 $Email = trim($Email);
    10 $Comments = trim($Comments);
    11 $Name = $FirstName . " " . $LastName;
    12 print ("Your name is $Name.<BR>\n");
    13 print ("Your Email address is $Email.<BR>\n");
    14 print ("This is what you had to say:<BR>\n $Comments<BR>\n");
    15 $CryptName = crypt($Name);
    16 print ("<P>This is the crypt() version of your name: $CryptName\n");
    17 ?>
    18 </BODY>
    19 </HTML>

    Аналогом функции crypt ( ) является md5 ( ) , речь о которой пойдет ниже в этой главе. Более подробная информация об использовании md5 ( ) , а также о синтак сисе encrypt ( ) и decrypt ( ) содержится в приложении С.

    Чтобы узнать, поддерживает ли ваш сервер конкретную функцию, надо просто вызвать ее. Если функция не поддерживается, вы получите сообщение об ошибке (рис.). Однако перед этим тщательно проверьте правописание и синтаксис. Так, если бы мы вызвали функцию, ошибочно переставив буквы епсгру ( ) , появи лось бы точно такое же сообщение, как на рис


    Будьте внимательны и не путайте шифрование строки с ее кодированием. Шиф- рование используется в целях безопасности и делает текст абсолютно не чита- емым. Кодирование заменяет только определенные символы на эквиваленты, приемлемые для URL.