Mcrypt php что это такое

Содержание
  1. Mcrypt php что это такое
  2. Table of Contents
  3. PHP Module: Mcrypt
  4. Overview
  5. Compatibility
  6. Requirements
  7. Installation steps
  8. In the interface
  9. On the command line
  10. Mcrypt
  11. » . $cipher . « \n» ; foreach( $modes as $mode ) echo « » . $mode . « \n» ; @ $td = mcrypt_module_open ( $cipher , ‘/usr/local/libmcrypt-2.5.8/modules/algorithms/’ , $mode , ‘/usr/local/libmcrypt-2.5.8/modules/modes/’ ); @ $key_size = mcrypt_enc_get_key_size ( $td ); @ $block_size = mcrypt_get_block_size ( $cipher , $mode ); @ $iv_size = mcrypt_get_iv_size ( $cipher , $mode ); @ mcrypt_module_close ( $td ); echo » key_size: " . ( $key_size ? $key_size : 'n/a' ) . " block_size: " . ( $block_size ? $block_size : 'n/a' ) . " iv_size: " . ( $iv_size ? $iv_size : 'n/a' ) . " \n» ; $td = NULL ; $key_size = NULL ; $block_size = NULL ; $iv_size = NULL ; > > Источник Обратимое шифрование по ключу на PHP Задача надежного шифрования текстовой информации часто встречается при программировании сайтов. В зашифрованном виде бывает необходимо хранить не только пароли, но и другую информацию. Недавно такая задача встала и у меня. Мне нужна была более-менее надежная функция обратимого шифрования текста по ключу. Почему по ключу? Дело в том, что шифрация без ключа может быть взломана, т.к. большинство алгоритмов шифрования можно найти в интернете и подобрать способ, чтобы получить исходные данные, а шифрация с ключом гораздо более надежная. Обратимое шифрование на PHP 5 библиотекой MCrypt Поискав по интернету я нашел целых 2 достаточно коротких в плане количества кода и в тоже время очень надежных способа обратимого шифрования по ключу, которые использует встроенную в php библиотеку Mcrypt. На подавляющем большинстве хостингов данная библиотека сразу же идет вместе с php. Но если вы администрируете свой сервер и данной библиотеки почему-то вдруг не оказалось в составе php, вы всегда можете ее доустановить командой apt-get install php5-mcrypt для Debian-подобных систем (в т.ч. Mint, Ubuntu) или yum install php-mcrypt для RedHat-подобных систем (в т.ч. Fedora, openSUSE, CentOS) или любым другим способом, который вам нравится (через dpkg, rpm, yast и т.д.). Затем в папке /etc находите папку php, содержащую ini-файлы расширений, загружаемых php по-умолчанию. Посмотреть путь до этой папки можно в php.ini в разделе «Dynamic Extensions». Это может быть папка /etc/php или /etc/php5/mods-available/ или как у меня на сервере /etc/php.d (вообщем, зависит от настроек php). В этой папке должен присутствовать файл mcrypt.ini. Если его там нет, тогда создайте его с таким содержимым: ; Enable mcrypt extension module extension=mcrypt.so После этого можно включить расширение командой php5enmod mcrypt, а затем перезапустить сервер /etc/init.d/apache2 restart для Debian-систем или service httpd restart для RedHat систем. Разумеется, все описанные действия выполняются с правами root-а. Итак, теперь приведу примеры 2-х способов шифрования по ключу, которые я нашел для себя в интернете. 1-й способ. Обратимое шифрование по произвольному ключу. define(‘ENCRYPTION_KEY’, ‘_91X:s+// Decrypt Function function mc_decrypt($decrypt, $key) < $decrypt = explode('|', $decrypt.'|'); $decoded = base64_decode($decrypt[0]); $iv = base64_decode($decrypt[1]); if(strlen($iv)!==mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC))< return false; >$key = pack('H*', $key); $decrypted = trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $decoded, MCRYPT_MODE_CBC, $iv)); $mac = substr($decrypted, -64); $decrypted = substr($decrypted, 0, -64); $calcmac = hash_hmac('sha256', $decrypted, substr(bin2hex($key), -32)); if($calcmac!==$mac) < return false; >$decrypted = unserialize($decrypted); return $decrypted; > Примечательно, что если выполнить приведенные мной примеры несколько раз, мы увидим каждый раз разные зашифрованные данные, хотя шифровался один и тот же текст. При этом, хоть и зашифрованные данные выглядят по-разному, результат расшифровки всегда один и тот же — исходный текст. Подробнее почитать про библиотеку шифрования можно на php.net. На ее основе можно придумать и свой, уникальный способ обратимого шифрования. Обратимое шифрование на PHP 7 библиотекой OpenSSL Функции библиотеки Mcrypt, такие как mcrypt_encrypt и mcrypt_decrypt считаются устаревшими и не рекомендуют их использовать. Начиная с PHP 7.2 библиотеку Mcrypt перенесли в PECL. Вместо MCrypt предлагается использовать openssl_encrypt и openssl_decrypt из библиотеки OpenSSL. Если всё же хотите подключить MCrypt в PHP 7.2 или выше, чтобы использовать ее функции шифрования, тогда можете посмотреть эту статью. Однако, вернемся к библиотеке OpenSSL. Эта библиотека содержит множество различных методов и алгоритмов симметричного и асимметричного шифрования. Пока что приведу один пример шифрования этими функциями, взятый с php.net а в будущем, доработаю статью, добавив еще примеры. define(‘ENCRYPTION_KEY’, ‘ab86d144e3f080b61c7c2e43’); // Encrypt $plaintext = «Тестируем обратимое шифрование на php 7″; $ivlen = openssl_cipher_iv_length($cipher=»AES-128-CBC»); $iv = openssl_random_pseudo_bytes($ivlen); $ciphertext_raw = openssl_encrypt($plaintext, $cipher, ENCRYPTION_KEY, $options=OPENSSL_RAW_DATA, $iv); $hmac = hash_hmac(‘sha256′, $ciphertext_raw, ENCRYPTION_KEY, $as_binary=true); $ciphertext = base64_encode( $iv.$hmac.$ciphertext_raw ); echo $ciphertext.’ ‘; // Decrypt $c = base64_decode($ciphertext); $ivlen = openssl_cipher_iv_length($cipher=»AES-128-CBC»); $iv = substr($c, 0, $ivlen); $hmac = substr($c, $ivlen, $sha2len=32); $ciphertext_raw = substr($c, $ivlen+$sha2len); $plaintext = openssl_decrypt($ciphertext_raw, $cipher, ENCRYPTION_KEY, $options=OPENSSL_RAW_DATA, $iv); $calcmac = hash_hmac(‘sha256’, $ciphertext_raw, ENCRYPTION_KEY, $as_binary=true); if (hash_equals($hmac, $calcmac)) Обратите внимание : этот алгоритм будет работать начиная с PHP 5.6 и выше. На предыдущих версиях будет выдавать ошибку из-за функции hash_equals, которая осуществляет сравнение строк нечувствительное к атакам по времени (подробнее про атаки по времени можете почитать на википедии). Другими альтернативами для шифрования на PHP 7+ являются библиотеки: Libsodium и defuse/php-encryption. Источник
  12. » . $mode . «
  13. Обратимое шифрование по ключу на PHP
  14. Обратимое шифрование на PHP 5 библиотекой MCrypt
  15. 1-й способ. Обратимое шифрование по произвольному ключу.
  16. 2-й способ. Очень надежное обратимое шифрование по шестандцатиричному ключу.
  17. Обратимое шифрование на PHP 7 библиотекой OpenSSL
Читайте также:  Ean 13 ru online generator shtrihkodov php

Mcrypt php что это такое

Did you find this document helpful?

Would you like to provide more feedback on this document?

Table of Contents

PHP Module: Mcrypt

Last modified: July 8, 2022

Overview

The mcrypt PHP module provides an interface to the mcrypt library and supports encryption. The cPanel-provided EasyApache 4 profiles include the mcrypt PHP module by default.

Compatibility

As of PHP 7.2, this module is only available through the PHP Extension Community Library (PECL).

Requirements

This module depends on the mcrypt library, which EasyApache 4 installs to the /opt/cpanel/libmcrypt directory when you install the mcrypt module.

Installation steps

In the interface

To install or uninstall the mcrypt PHP module, use WHM’s EasyApache 4 interface (WHM » Home » Software » EasyApache 4).

On the command line

To install the mcrypt PHP module, perform the following steps:

    On the command line as the root user, copy the files from the /opt/cpanel/libmcrypt/lib64/ directory to the /opt/cpanel/libmcrypt/lib/ directory with the following command:

rsync -avH /opt/cpanel/libmcrypt/lib64/ /opt/cpanel/libmcrypt/lib/
ea-php72-pecl install mcrypt-1.0.2

Источник

Mcrypt

If you’re wanting to use mcrypt on a newer version of PHP where it’s been deprecated try the shim for it instead:

Issue Solved when installing php7.2-mcrypt

I was also facing the same issue. Check this link https://stackoverflow.com/q/48275494/7713811 to get the right solution for installing it in PHP

This was posted before by another user but has been downvoted. I just wanted to confirm that we suffered massive performance issues related to mcrypt on CentOS (PHP 5.6.32) that are not present in other flavors of Linux.

A sampling of 25,000 encrypts/decrypts takes 4-5x longer when running mcrypt on Centos 7 as compared to Ubuntu. Switching out mcrypt for OpenSSL on Centos will result in a massive increase in performance.

For lower traffic website it can be negligible, but when you start seeing significant traffic/load it will quickly bring down a server.

people using phpmyadmin are redirected to this manual if they don’t have mcrypt installed. If you want to install mcrypt on debian, first check your php version:

Then install the appropriate version of mcrypt (php5-mcrypt if your php version is 5.x)

yourserver# apt-get install php4-mcrypt
. or.
yourserver# apt-get install php5-mcrypt

These are two simple functions I built for 256-bit encryption/decryption with mcrypt. I’ve decided to use MCRYPT_RIJNDAEL_128 because it’s AES-compliant, and MCRYPT_MODE_CBC. (ECB mode is inadequate for many purposes because it does not use an IV.)

This function stores a hash of the data to verify that the data was decrypted successfully, but this could be easily removed if necessary.

function encrypt ( $decrypted , $password , $salt = ‘!kQm*fF3pXe1Kbm%9’ ) <
// Build a 256-bit $key which is a SHA256 hash of $salt and $password.
$key = hash ( ‘SHA256’ , $salt . $password , true );
// Build $iv and $iv_base64. We use a block size of 128 bits (AES compliant) and CBC mode. (Note: ECB mode is inadequate as IV is not used.)
srand (); $iv = mcrypt_create_iv ( mcrypt_get_iv_size ( MCRYPT_RIJNDAEL_128 , MCRYPT_MODE_CBC ), MCRYPT_RAND );
if ( strlen ( $iv_base64 = rtrim ( base64_encode ( $iv ), ‘=’ )) != 22 ) return false ;
// Encrypt $decrypted and an MD5 of $decrypted using $key. MD5 is fine to use here because it’s just to verify successful decryption.
$encrypted = base64_encode ( mcrypt_encrypt ( MCRYPT_RIJNDAEL_128 , $key , $decrypted . md5 ( $decrypted ), MCRYPT_MODE_CBC , $iv ));
// We’re done!
return $iv_base64 . $encrypted ;
>

function decrypt ( $encrypted , $password , $salt = ‘!kQm*fF3pXe1Kbm%9’ ) // Build a 256-bit $key which is a SHA256 hash of $salt and $password.
$key = hash ( ‘SHA256’ , $salt . $password , true );
// Retrieve $iv which is the first 22 characters plus ==, base64_decoded.
$iv = base64_decode ( substr ( $encrypted , 0 , 22 ) . ‘==’ );
// Remove $iv from $encrypted.
$encrypted = substr ( $encrypted , 22 );
// Decrypt the data. rtrim won’t corrupt the data because the last 32 characters are the md5 hash; thus any \0 character has to be padding.
$decrypted = rtrim ( mcrypt_decrypt ( MCRYPT_RIJNDAEL_128 , $key , base64_decode ( $encrypted ), MCRYPT_MODE_CBC , $iv ), «\0\4» );
// Retrieve $hash which is the last 32 characters of $decrypted.
$hash = substr ( $decrypted , — 32 );
// Remove the last 32 characters from $decrypted.
$decrypted = substr ( $decrypted , 0 , — 32 );
// Integrity check. If this fails, either the data is corrupted, or the password/salt was incorrect.
if ( md5 ( $decrypted ) != $hash ) return false ;
// Yay!
return $decrypted ;
>
?>

If you want a quick way to see what ciphers, modes, key, block and iv sizes are supported on your server, try something like the following.

Note: I used this simple bash: `locate libmcrypt` from terminal on Mac OS X to determine the install paths to the algorithms and modes directories. Lots of function calls generate warnings for certain ciphers, hence the use of error suppression.

$modes = mcrypt_list_modes ();
$algorithms = mcrypt_list_algorithms ();
foreach( $algorithms as $cipher )
echo «

» . $cipher . «

\n» ;
foreach( $modes as $mode )
echo «

» . $mode . «

\n» ;
@ $td = mcrypt_module_open (
$cipher ,
‘/usr/local/libmcrypt-2.5.8/modules/algorithms/’ ,
$mode ,
‘/usr/local/libmcrypt-2.5.8/modules/modes/’ );
@ $key_size = mcrypt_enc_get_key_size ( $td );
@ $block_size = mcrypt_get_block_size ( $cipher , $mode );
@ $iv_size = mcrypt_get_iv_size ( $cipher , $mode );
@ mcrypt_module_close ( $td );
echo »

 
key_size: " . ( $key_size ? $key_size : 'n/a' )
. " block_size: " . ( $block_size ? $block_size : 'n/a' )
. " iv_size: " . ( $iv_size ? $iv_size : 'n/a' )
. "

\n» ;
$td = NULL ;
$key_size = NULL ;
$block_size = NULL ;
$iv_size = NULL ;
>
>

Источник

Обратимое шифрование по ключу на PHP

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

Обратимое шифрование на PHP 5 библиотекой MCrypt

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

На подавляющем большинстве хостингов данная библиотека сразу же идет вместе с php. Но если вы администрируете свой сервер и данной библиотеки почему-то вдруг не оказалось в составе php, вы всегда можете ее доустановить командой apt-get install php5-mcrypt для Debian-подобных систем (в т.ч. Mint, Ubuntu) или yum install php-mcrypt для RedHat-подобных систем (в т.ч. Fedora, openSUSE, CentOS) или любым другим способом, который вам нравится (через dpkg, rpm, yast и т.д.).

Затем в папке /etc находите папку php, содержащую ini-файлы расширений, загружаемых php по-умолчанию. Посмотреть путь до этой папки можно в php.ini в разделе «Dynamic Extensions». Это может быть папка /etc/php или /etc/php5/mods-available/ или как у меня на сервере /etc/php.d (вообщем, зависит от настроек php). В этой папке должен присутствовать файл mcrypt.ini. Если его там нет, тогда создайте его с таким содержимым:

; Enable mcrypt extension module
extension=mcrypt.so

После этого можно включить расширение командой php5enmod mcrypt, а затем перезапустить сервер /etc/init.d/apache2 restart для Debian-систем или service httpd restart для RedHat систем. Разумеется, все описанные действия выполняются с правами root-а.

Итак, теперь приведу примеры 2-х способов шифрования по ключу, которые я нашел для себя в интернете.

1-й способ. Обратимое шифрование по произвольному ключу.

define(‘ENCRYPTION_KEY’, ‘_91X:s+‘; $decrypted = decrypt($encrypted, ENCRYPTION_KEY); echo $decrypted; function encrypt($decrypted, $key) < $ekey = hash('SHA256', $key, true); srand(); $iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC), MCRYPT_RAND); if (strlen($iv_base64 = rtrim(base64_encode($iv), '=')) != 22) return false; $encrypted = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $ekey, $decrypted . md5($decrypted), MCRYPT_MODE_CBC, $iv)); return $iv_base64 . $encrypted; >function decrypt($encrypted, $key)

2-й способ. Очень надежное обратимое шифрование по шестандцатиричному ключу.

Внимание! Ключ должен быть шестандцатиричным (символы 0123456789ABCDEF) длиной 32 или 64 символа.

define('ENCRYPTION_KEY', 'e3f080b6edfcf6fff70654021c7c2e43'); $txt = 'Тестируем обратимое шифрование на php'; $encrypted = mc_encrypt($txt, ENCRYPTION_KEY); echo $encrypted.'
'; $decrypted = mc_decrypt($encrypted, ENCRYPTION_KEY); echo $decrypted; // Encrypt Function function mc_encrypt($encrypt, $key) < $encrypt = serialize($encrypt); $iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC), MCRYPT_DEV_URANDOM); $key = pack('H*', $key); $mac = hash_hmac('sha256', $encrypt, substr(bin2hex($key), -32)); $passcrypt = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $encrypt.$mac, MCRYPT_MODE_CBC, $iv); $encoded = base64_encode($passcrypt).'|'.base64_encode($iv); return $encoded; >// Decrypt Function function mc_decrypt($decrypt, $key) < $decrypt = explode('|', $decrypt.'|'); $decoded = base64_decode($decrypt[0]); $iv = base64_decode($decrypt[1]); if(strlen($iv)!==mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC))< return false; >$key = pack('H*', $key); $decrypted = trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $decoded, MCRYPT_MODE_CBC, $iv)); $mac = substr($decrypted, -64); $decrypted = substr($decrypted, 0, -64); $calcmac = hash_hmac('sha256', $decrypted, substr(bin2hex($key), -32)); if($calcmac!==$mac) < return false; >$decrypted = unserialize($decrypted); return $decrypted; >

Примечательно, что если выполнить приведенные мной примеры несколько раз, мы увидим каждый раз разные зашифрованные данные, хотя шифровался один и тот же текст. При этом, хоть и зашифрованные данные выглядят по-разному, результат расшифровки всегда один и тот же — исходный текст. Подробнее почитать про библиотеку шифрования можно на php.net. На ее основе можно придумать и свой, уникальный способ обратимого шифрования.

Обратимое шифрование на PHP 7 библиотекой OpenSSL

Функции библиотеки Mcrypt, такие как mcrypt_encrypt и mcrypt_decrypt считаются устаревшими и не рекомендуют их использовать. Начиная с PHP 7.2 библиотеку Mcrypt перенесли в PECL. Вместо MCrypt предлагается использовать openssl_encrypt и openssl_decrypt из библиотеки OpenSSL.

Если всё же хотите подключить MCrypt в PHP 7.2 или выше, чтобы использовать ее функции шифрования, тогда можете посмотреть эту статью.

Однако, вернемся к библиотеке OpenSSL. Эта библиотека содержит множество различных методов и алгоритмов симметричного и асимметричного шифрования. Пока что приведу один пример шифрования этими функциями, взятый с php.net а в будущем, доработаю статью, добавив еще примеры.

define(‘ENCRYPTION_KEY’, ‘ab86d144e3f080b61c7c2e43’); // Encrypt $plaintext = «Тестируем обратимое шифрование на php 7″; $ivlen = openssl_cipher_iv_length($cipher=»AES-128-CBC»); $iv = openssl_random_pseudo_bytes($ivlen); $ciphertext_raw = openssl_encrypt($plaintext, $cipher, ENCRYPTION_KEY, $options=OPENSSL_RAW_DATA, $iv); $hmac = hash_hmac(‘sha256′, $ciphertext_raw, ENCRYPTION_KEY, $as_binary=true); $ciphertext = base64_encode( $iv.$hmac.$ciphertext_raw ); echo $ciphertext.’
‘; // Decrypt $c = base64_decode($ciphertext); $ivlen = openssl_cipher_iv_length($cipher=»AES-128-CBC»); $iv = substr($c, 0, $ivlen); $hmac = substr($c, $ivlen, $sha2len=32); $ciphertext_raw = substr($c, $ivlen+$sha2len); $plaintext = openssl_decrypt($ciphertext_raw, $cipher, ENCRYPTION_KEY, $options=OPENSSL_RAW_DATA, $iv); $calcmac = hash_hmac(‘sha256’, $ciphertext_raw, ENCRYPTION_KEY, $as_binary=true); if (hash_equals($hmac, $calcmac))

Обратите внимание : этот алгоритм будет работать начиная с PHP 5.6 и выше. На предыдущих версиях будет выдавать ошибку из-за функции hash_equals, которая осуществляет сравнение строк нечувствительное к атакам по времени (подробнее про атаки по времени можете почитать на википедии).

Другими альтернативами для шифрования на PHP 7+ являются библиотеки: Libsodium и defuse/php-encryption.

Источник

Оцените статью