Our Blog

Симметричное шифрование в PHP

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

Самый простой вариант зашифровать строку — выполнить логическую операцию XOR над данными и ключом. Для расшифровки требуется повторить операцию.
Какой бы сложный алгоритм вы ни использовали, у симметричного шифрования есть несколько очень серьезных недостатков:
1) Один ключ используется для шифрования и дешифрования. Таким образом, отправитель и получатель зашифрованных данных должны обладать одним и тем же ключом. А как обменяться ключами через Интернет, когда эта связь открытая? Допустим, что вы хотите пообщаться со своим другом из другого города по электронной почте, не боясь, что кто-то подсмотрит вашу переписку. Один из вас должен придумать или сгенерировать ключ, с помощью которого будет происходить шифрование, и выслать через e-mail своему корреспонденту. Если ключ не был перехвачен, то последующие зашифрованные сообщения можно считать более-менее закрытыми, но если письмо с ключом было перехвачено, то шифрование становится бессмысленным.
2) Хакеры утверждают (и этому достаточно исторических подтверждений), что информация, известная двоим, может стать доступной всем. Есть много способов получения нужной информации с помощью социальной инженерии.
И все же, симметричному шифрованию можно найти множество эффективных применений. Например, шифрование данных на сервере. Допустим, что необходимо зашифровать какой-либо документ, чтобы хакер, взломав сервер, не смог увидеть его содержимое. Документ не будет передаваться по сети, а значит, никому не нужно отдавать ключ, поэтому перехватить его не удастся.
К наиболее распространенным алгоритмам симметричного шифрования относятся DES, 3DES, Blowfish, CAST 128 и т. д. Самый простой способ зашифровать данные — воспользоваться функцией mcrypt_ecb (), которая принимает четыре параметра:
• константу, указывающую на алгоритм. Интерпретатор РНР для шифрования использует библиотеку libmcrypt, которая поддерживает большое количество алгоритмов, поэтому рассматривать их все нет смысла, но основные константы знать необходимо:
• MCRYPT_DES — алгоритм DES;
• MCRYPT_3DES — алгоритм 3DES;
• MCRYPT_BLOWFISH — алгоритм Blowfish;
• MCRYPT_CAST128 — алгоритм Castl28;
• MCRYPT_CAST256 — алгоритм Cast256;
• ключ;
• данные для шифрования;
• режим. Здесь можно указать одно из двух значений:
• MCRYPT_ENCRYPT — зашифровать данные;
• MCRYPT_DECRYPT — расшифровать.
Рассмотрим простейший пример шифрования по алгоритму DES:

<?php
$кеу="это КЛЮЧ";
$text="Сообщение, которое должно быть зашифровано";
$str=mcrypt_ecb(MCRYPT_DES, $key, $text, MCRYPT_ENCRYPT);
?>

В результате в переменной $str будет сохранен зашифрованный текст нз переменной $text. Чтобы расшифровать данные, нужно использовать тот же ключ и ту же функцию, но в качестве третьего параметра передать зашифрованный текст, а в качестве последнего — константу MCRYPT_DECRYPT:

<?php
$decrypted_str=mcrypt_ecb(MCRYPT_DES, $key, $str,
MCRYPT_DECRYPT);
?>
Comments ( 0 )
    -->