В данной статье мы решим следующую задачу, а именно организацию безопасного обмена данными с другим(и) сайтом. К примеру у Вас есть два сайта на которых построен обмен данными. 

Как же защитить обмен данными?

Если допустить что эта информация конфиденциальная и требует защиту.

Самым простым решением в данной ситуации будет размещение этих данных на странице с парольной защитой и предоставленных данных в зашифрованном виде, с дополнительным паролем шифрования. Так же рекомендуется отправлять уже в зашифрованном виде данные методом POST на URL с парольной защитой.

Давайте создадим страницу которая будет запрашивать имя пользователя и пароль , а затем шифровать и выводить содержимое файла с данными про активность учётной записи.

<?php

$user= 'bank';

$password = 'fas8uj3'; 

if($SERVER['PHP_AUTH_USER']) != $user ||

                        $SERVER['PHP_AUTH_PW'] != $password) {

                        header('WWW-Authenticate: Basic realm="Secure Transfer"');

                        header('HTTP/1.0 401 Unauthorized'); 

                        echo "You must supply a valid username and password for access.";

                        exit;

                        } 

                        header('Content-type: text/plain; charset=UTF-8');

                        $filename = strftime ('usr/local/account-activity.%Y-%m-%d , time() - 86400');

                        $data = implode ('' , file($filename)); 

                        $algoritm = MCRYPT_BLOWFISH;

                        $mode = MCRYPT_MODE_CBC;

                        $key = "There are many ways to butter your toast."; 

                        /*Шифрованние данных.*/

                        $iv = mcrypt_create_iv(mcrypt_get_iv_size($algorithm, $mode)), MCRYPT_DEV_URANDOM);

                        $ciphertext = mcrypt_encrypt($algorithm, $key, $data, $mode, $iv); 

                        echo base64_encode($iv,$ciphertext);

?>

 

А теперь выдержка кода для получения зашифрованной страницы и дешифрования

<?php

$user = 'bank';

$password = 'fas8uj3';

$algorithm = MCRYPT_BLOWFISH;

$mode = MCRYPT_MODE_CBC;

$key = "There are many ways to butter your toast." 

$url = 'https://bank.example.com/accounts.php';

$c = curl_init($url); 

curl_setopt($c, CURLOPT_USERPWD, "$user:$password");

curl_setopt($c, CURLOPT_RETURNTRANSFER, TRUE);

$data = curl_exec($c); 

if(FALSE===$data) {

                        exit("Transfer failed:" , curl_error($c));

$binary_data = base64_decode($data);

$iv_size = mcrypt_get_iv_size($algorithm, $mode);

$iv = substr($binary_data, $iv_size, strlen($binary_data)); 

echo mcrypt_decrypt($algorithm, $key, $ciphertext, $mode , $iv);

?>

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