Совместное использование зашифрованных данных с другим веб-сайтом

Задача
Необходимо организовать безопасный обмен данными с другим веб-сайтом.

Решение
Если другой веб-сайт получает информацию с вашего веб-сайта, то поместите эти данные на страницу, защищенную паролем. Можно также предоставлять информацию в зашифрованном виде, с паролем или без него. Если необходимо доставить данные на другой веб-сервер, то передавайте потенциально шифруемые данные с помощью метода POST на защищенный паролем URL.

Обсуждение
Следующая страница требует имя пользователя и пароль, а затем кодирует и показывает содержимое файла, содержащего информацию о вчерашней активности учетной записи:

$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');
$filename = strftime('/usr/local/account-activity.%Y-%m-%d',time() - 86400);
$data = join('',file($filename));
$alg = MCRYPT_BLOWFISH;
$mode = MCRYPT_MODE_CBC;
$key = "There are many ways to butter your toast.";
// шифруем данные
$iv = $iv = mcrypt_create_iv(mcrypt_get_iv_size($alg,$mode),
MCRYPT_DEV_URANDOM);
$ciphertext = mcrypt_encrypt($alg, $key, $data, $mode, $iv);
print base64_encode($iv.$ciphertext);

Ниже приведен соответствующий фрагмент кода для получения зашифрованной страницы и расшифровки информации:

$user = 'bank';
$password = 'fas8uj3';
$alg = MCRYPT_BLOWFISH;
$mode = MCRYPT_MODE_CBC;
$key = "There are many ways to butter your toast.";
$fh = fopen("http://$user:$password@bank.example.com/accounts.php",'r')
or die($php_errormsg);
$data = '';
while (! feof($fh)) { $data .= fgets($fh,1048576); }
fclose($fh) or die($php_errormsg);
$binary_data = base64_decode($data);
$iv_size = mcrypt_get_iv_size($alg,$mode);
$iv = substr($binary_data,0,$iv_size);
$ciphertext = substr($binary_data,$iv_size,strlen($binary_data));
print mcrypt_decrypt($alg,$key,$ciphertext,$mode,$iv);

Запрашивающая программа выполняет те же шаги, что и программа шифрования, но в обратном порядке.


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

В предыдущем примере имя пользователя и пароль посылается по сети открытым текстом, пока не будет установлено SSL-соединение. Однако если вы используете SSL, то, возможно, нет необходимости шифровать содержимое файла. Мы включили в этот пример и запрос пароля и шифрование файла, чтобы показать, как это можно сделать. Но есть одна ситуация, когда полезна и парольная защита и шифрование файла: если файл не расшифровывается автоматически при получении. Автоматическая программа может получить зашифрованный файл и сохранить его в зашифрованном виде для последующей обработки. Таким образом, ключ для дешифрования запрашивающей программе не требуется..



Оцените статью: (0 голосов)
0 5 0

Статьи из раздела PHP на эту тему:
Не храните пароли на своем сайте
Обнаружение SSL-соединения
Проверка данных с помощью хеширования
Проверка надежности пароля
Работа с потерянными паролями

Вернуться в раздел: PHP / 14. Шифрование и безопасность