Как реализовать шифрование данных на php?

Пользователь

от catherine_wintheiser , в категории: PHP , 2 года назад

Как реализовать шифрование данных на php?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от quinton.prosacco , 2 года назад

@catherine_wintheiser 

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

  1. Шифрование с использованием OpenSSL:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
// Генерируем ключ и вектор инициализации
$key = openssl_random_pseudo_bytes(32);
$iv = openssl_random_pseudo_bytes(16);

// Шифруем данные
$data = 'Секретная информация';
$ciphertext = openssl_encrypt($data, 'AES-256-CBC', $key, OPENSSL_RAW_DATA, $iv);

// Дешифруем данные
$plaintext = openssl_decrypt($ciphertext, 'AES-256-CBC', $key, OPENSSL_RAW_DATA, $iv);

// Проверяем, что данные совпадают
echo $plaintext; // Секретная информация


  1. Шифрование с использованием mcrypt:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
// Генерируем ключ и вектор инициализации
$key = 'mysecretkey';
$iv = mcrypt_create_iv(16, MCRYPT_RAND);

// Шифруем данные
$data = 'Секретная информация';
$ciphertext = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_CBC, $iv);

// Дешифруем данные
$plaintext = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $ciphertext, MCRYPT_MODE_CBC, $iv);

// Проверяем, что данные совпадают
echo $plaintext; // Секретная информация


  1. Шифрование с использованием sodium:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
// Генерируем ключ и вектор инициализации
$key = sodium_crypto_secretstream_xchacha20poly1305_keygen();
$nonce = random_bytes(SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_NONCEBYTES);

// Шифруем данные
$data = 'Секретная информация';
$ciphertext = sodium_crypto_secretstream_xchacha20poly1305_push(
    null,
    $data,
    $nonce,
    $key
);

// Дешифруем данные
$plaintext = sodium_crypto_secretstream_xchacha20poly1305_pull(
    $ciphertext,
    $nonce,
    $key
);

// Проверяем, что данные совпадают
echo $plaintext; // Секретная информация


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