Шифрование в php

Опубликовано 2023.02.03

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

PHP предоставляет несколько функций для шифрования информации:

mcrypt_encrypt() - эта функция используется для шифрования информации с помощью алгоритма шифрования.

Mcrypt — замена старой функции crypt(), Mcrypt позволяет шифровать и расшифровывать с использованием различных алгоритмов, таких как AES, Blowfish и т. д.

  1. // encryption key
  2. $key = "any secret key";
  3.  
  4. // plaintext to be encrypted
  5. $plaintext = "строка, которую необходимо зашифровать";
  6.  
  7. // initialization vector
  8. $iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC), MCRYPT_DEV_URANDOM);
  9.  
  10. // encryption
  11. $ciphertext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $plaintext, MCRYPT_MODE_CBC, $iv);
  12.  
  13. // concatenate IV and ciphertext for storage or transmission
  14. $ciphertext_with_iv = $iv . $ciphertext;

Обратите внимание, что mcrypt_encrypt устарел, начиная с PHP 7.1, и вместо него рекомендуется использовать OpenSSL.

openssl_encrypt() - эта функция используется для шифрования информации с помощью алгоритма OpenSSL.

OpenSSL — это расширение предоставляет интерфейс к криптографической библиотеке OpenSSL, позволяя выполнять шифрование и дешифрование с использованием таких алгоритмов, как AES, RSA и т. д.

  1. // encryption key
  2. $key = "any secret key";
  3.  
  4. // plaintext to be encrypted
  5. $plaintext = "строка, которую необходимо зашифровать";
  6.  
  7. // initialization vector
  8. $iv_len = openssl_cipher_iv_length("AES-256-CBC");
  9. $iv = openssl_random_pseudo_bytes($iv_len);
  10.  
  11. // encryption
  12. $ciphertext = openssl_encrypt($plaintext, "AES-256-CBC", $key, 0, $iv);
  13.  
  14. // concatenate IV and ciphertext for storage or transmission
  15. $ciphertext_with_iv = $iv . $ciphertext;

Здесь AES-256-CBC — алгоритм симметричного шифрования. Рекомендуется использовать уникальный случайный вектор инициализации (IV) для каждого шифрования, чтобы гарантировать уникальность зашифрованных сообщений и предотвратить создание одного и того же зашифрованного текста разными исходными текстами.

hash() - эта функция используется для создания хэш-суммы информации.

Её можно использовать для создания хэша данных, например SHA-256 или MD5. Хэши обычно используются для безопасного хранения паролей, поскольку они являются односторонними и не могут быть изменены для восстановления исходных данных.

  1. $plaintext = "строка, которую необходимо зашифровать";
  2. $hash = hash("sha256", $plaintext);
  3.  
  4. echo $hash;

Хэш-функция генерирует строку символов фиксированной длины, представляющую ввод, известную как хэш-значение. В этом примере мы используем алгоритм sha256 для генерации 256-битного хеш-значения. Другие популярные алгоритмы включают md5, sha1, sha384 и sha512. Важно выбрать безопасный алгоритм хеширования для хранения паролей и другой конфиденциальной информации.

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