Предопределённые константы mcrypt

Константы в PHP

Константы по принципу работы похожи на переменные, но имеют одно важное отличие — записать какое-либо значение в константу можно только 1 раз, перезаписать это значение уже не получится.

Создать константу можно с помощью функции define() :

Первым значением мы передаём название константы (в нашем случае LOGIN ), вторым — значение 12345 .

Как вы заметили, у константы нет значка $ в начале. Чтобы не путаться, PHP разработчики взяли за правило всегда писать константы большими буквами, а слова разделять нижним подчёркиванием _ :

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

Строковые константы в PHP

Бывают ситуации, когда нам нужно получить значение константы, но само имя константы лежит в переменной. В этом случае мы можем получить значение константы с помощью функции constant() :

Встроенные или магические константы

В PHP существует несколько встроенных констант. Магическими они называются потому что их значение меняется в зависимости от контекста:

  • __LINE__ — текущая строка в скрипте
  • __FILE__ — полный путь и имя текущего скрипта
  • __DIR__ — полный путь к директории, в которой расположен скрипт

Есть и другие константы, но их назначение вы поймёте немного позже:

  • __FUNCTION__ — имя текущей функции
  • __CLASS__ — имя текущего класса с пространством имён
  • __TRAIT__ — имя текущего трейта с пространством имён
  • __METHOD__ — имя текущего метода
  • __NAMESPACE__ — имя текущего пространства имён
  • ClassName::class — имя классу, к которому мы обращаемся, с пространством имён

Напишите скрипт, который:
1. Создаёт константу PASSWORD со значением ioef84Fe# .
2. Выводит значение константы внутри тега div.

Mcrypt Encryption Functions

Руководство по PHP
Пред. След.

LXXIII. Mcrypt Encryption Functions

This is an interface to the mcrypt library, which supports a wide variety of block algorithms such as DES, TripleDES, Blowfish (default), 3-WAY, SAFER-SK64, SAFER-SK128, TWOFISH, TEA, RC2 and GOST in CBC, OFB, CFB and ECB cipher modes. Additionally, it supports RC6 and IDEA which are considered «non-free».

These functions work using mcrypt. To use it, download libmcrypt-x.x.tar.gz from http://mcrypt.sourceforge.net/ and follow the included installation instructions. Windows users will find all the needed compiled mcrypt binaries at http://ftp.emini.dk/pub/php/win32/mcrypt/.

As of PHP 5.0.0 you will need libmcrypt Version 2.5.6 or greater.

If you linked against libmcrypt 2.4.x or higher, the following additional block algorithms are supported: CAST, LOKI97, RIJNDAEL, SAFERPLUS, SERPENT and the following stream ciphers: ENIGMA (crypt), PANAMA, RC4 and WAKE. With libmcrypt 2.4.x or higher another cipher mode is also available; nOFB.

You need to compile PHP with the —with-mcrypt[=DIR] parameter to enable this extension. DIR is the mcrypt install directory. Make sure you compile libmcrypt with the option —disable-posix-threads .

Поведение этих функций зависит от установок в php.ini .

Таблица 1. Mcrypt configuration options

Name Default Changeable Changelog
mcrypt.algorithms_dir NULL PHP_INI_ALL Available since PHP 4.0.2.
mcrypt.modes_dir NULL PHP_INI_ALL Available since PHP 4.0.2.

Данное расширение не определяет никакие типы ресурсов.

Перечисленные ниже константы определены данным расширением и могут быть доступны только в том случае, если PHP был собран с поддержкой этого расширения или же в том случае, если данное расширение подгружается во время выполнения.

Mcrypt can operate in four block cipher modes (CBC, OFB, CFB, and ECB). If linked against libmcrypt-2.4.x or higher the functions can also operate in the block cipher mode nOFB and in STREAM mode. Below you find a list with all supported encryption modes together with the constants that are defines for the encryption mode. For a more complete reference and discussion see Applied Cryptography by Schneier.

MCRYPT_MODE_ECB (electronic codebook) is suitable for random data, such as encrypting other keys. Since data there is short and random, the disadvantages of ECB have a favorable negative effect.

MCRYPT_MODE_CBC (cipher block chaining) is especially suitable for encrypting files where the security is increased over ECB significantly.

MCRYPT_MODE_CFB (cipher feedback) is the best mode for encrypting byte streams where single bytes must be encrypted.

MCRYPT_MODE_OFB (output feedback, in 8bit) is comparable to CFB, but can be used in applications where error propagation cannot be tolerated. It’s insecure (because it operates in 8bit mode) so it is not recommended to use it.

MCRYPT_MODE_NOFB (output feedback, in nbit) is comparable to OFB, but more secure because it operates on the block size of the algorithm.

MCRYPT_MODE_STREAM is an extra mode to include some stream algorithms like WAKE or RC4.

Some other mode and random device constants:

Here is a list of ciphers which are currently supported by the mcrypt extension. For a complete list of supported ciphers, see the defines at the end of mcrypt.h . The general rule with the mcrypt-2.2.x API is that you can access the cipher from PHP with MCRYPT_ciphername. With the libmcrypt-2.4.x and libmcrypt-2.5.x API these constants also work, but it is possible to specify the name of the cipher as a string with a call to mcrypt_module_open() .

LIV. Mcrypt Encryption Functions

This is an interface to the mcrypt library, which supports a wide variety of block algorithms such as DES, TripleDES, Blowfish (default), 3-WAY, SAFER-SK64, SAFER-SK128, TWOFISH, TEA, RC2 and GOST in CBC, OFB, CFB and ECB cipher modes. Additionally, it supports RC6 and IDEA which are considered «non-free».

If you linked against libmcrypt 2.4.x or higher, the following additional block algorithms are supported: CAST, LOKI97, RIJNDAEL, SAFERPLUS, SERPENT and the following stream ciphers: ENIGMA (crypt), PANAMA, RC4 and WAKE. With libmcrypt 2.4.x or higher another cipher mode is also available; nOFB.

You need to compile PHP with the —with-mcrypt[=DIR] parameter to enable this extension. DIR is the mcrypt install directory. Make sure you compile libmcrypt with the option —disable-posix-threads .

Поведение этих функций находится в зависимости от установок в php.ini .

Таблица 1. Mcrypt configuration options

Name Default Changeable
mcrypt.algorithms_dir NULL PHP_INI_ALL
mcrypt.modes_dir NULL PHP_INI_ALL

Данное расширение не определяет никакие типы ресурсов.

Перечисленные ниже константы определены данным расширением и могут быть доступны только в том случае, если PHP был собран с поддержкой этого расширения или же в том случае, если данное расширение подгружается во время выполнения.

Mcrypt can operate in four block cipher modes (CBC, OFB, CFB, and ECB). If linked against libmcrypt-2.4.x or higher the functions can also operate in the block cipher mode nOFB and in STREAM mode. Below you find a list with all supported encryption modes together with the constants that are defines for the encryption mode. For a more complete reference and discussion see Applied Cryptography by Schneier (ISBN 0-471-11709-9).

MCRYPT_MODE_ECB (electronic codebook) is suitable for random data, such as encrypting other keys. Since data there is short and random, the disadvantages of ECB have a favorable negative effect.

MCRYPT_MODE_CBC (cipher block chaining) is especially suitable for encrypting files where the security is increased over ECB significantly.

MCRYPT_MODE_CFB (cipher feedback) is the best mode for encrypting byte streams where single bytes must be encrypted.

MCRYPT_MODE_OFB (output feedback, in 8bit) is comparable to CFB, but can be used in applications where error propagation cannot be tolerated. It’s insecure (because it operates in 8bit mode) so it is not recommended to use it.

MCRYPT_MODE_NOFB (output feedback, in nbit) is comparable to OFB, but more secure because it operates on the block size of the algorithm.

MCRYPT_MODE_STREAM is an extra mode to include some stream algorithms like WAKE or RC4.

Some other mode and random device constants:

Here is a list of ciphers which are currently supported by the mcrypt extension. For a complete list of supported ciphers, see the defines at the end of mcrypt.h . The general rule with the mcrypt-2.2.x API is that you can access the cipher from PHP with MCRYPT_ciphername. With the libmcrypt-2.4.x and libmcrypt-2.5.x API these constants also work, but it is possible to specify the name of the cipher as a string with a call to mcrypt_module_open() .

Использование неопределенной константы MCRYPT_BLOWFISH

После переустановки нашего сервера MCRYPT больше не работает, и PHP дает уведомление «Использование неопределенной константы MCRYPT_BLOWFISH» (Apache 2.4, PHP 5.5).

Почему mcrypt не распознается? Как я могу сделать эту работу?

Как только я говорю, я нахожу решение, хе-хе.

Это сработало для меня: mCrypt не присутствует после обновления Ubuntu до 13.10

необходимо было: sudo php5enmod mcrypt

даже если он, похоже, уже включен, он исправил его.

Когда я пытаюсь включить метод Express Paypal, я столкнулся с этой ошибкой.

Ошибка: использование неопределенной константы MCRYPT_BLOWFISH – предполагается «MCRYPT_BLOWFISH» в /var/www/…/lib/Varien/Crypt/Mcrypt.php в строке 56

Во-первых, мы можем запустить этот cmd, чтобы проверить, работает ли mcrypt или нет:

Если mcrypt не включен, мы можем использовать следующее, чтобы включить его, как и другие, упомянутые

Кроме того, нам было лучше проверить установленный пакет php5-mcrypt или нет

Хотя, если вы устанавливаете fastcgi и php-fpm, как мы, мы должны перезапустить службу php-fpm и службу apache2.

LXVII. Mcrypt Encryption Functions

This is an interface to the mcrypt library, which supports a wide variety of block algorithms such as DES, TripleDES, Blowfish (default), 3-WAY, SAFER-SK64, SAFER-SK128, TWOFISH, TEA, RC2 and GOST in CBC, OFB, CFB and ECB cipher modes. Additionally, it supports RC6 and IDEA which are considered «non-free».

As of PHP 5.0.0 you will need libmcrypt Version 2.5.6 or greater.

If you linked against libmcrypt 2.4.x or higher, the following additional block algorithms are supported: CAST, LOKI97, RIJNDAEL, SAFERPLUS, SERPENT and the following stream ciphers: ENIGMA (crypt), PANAMA, RC4 and WAKE. With libmcrypt 2.4.x or higher another cipher mode is also available; nOFB.

You need to compile PHP with the —with-mcrypt[=DIR] parameter to enable this extension. DIR is the mcrypt install directory. Make sure you compile libmcrypt with the option —disable-posix-threads .

Поведение этих функций зависит от установок в php.ini .

Таблица 1. Mcrypt configuration options

Name Default Changeable Changelog
mcrypt.algorithms_dir NULL PHP_INI_ALL Available since PHP 4.0.2.
mcrypt.modes_dir NULL PHP_INI_ALL Available since PHP 4.0.2.

Данное расширение не определяет никакие типы ресурсов.

Перечисленные ниже константы определены данным расширением и могут быть доступны только в том случае, если PHP был собран с поддержкой этого расширения или же в том случае, если данное расширение подгружается во время выполнения.

Mcrypt can operate in four block cipher modes (CBC, OFB, CFB, and ECB). If linked against libmcrypt-2.4.x or higher the functions can also operate in the block cipher mode nOFB and in STREAM mode. Below you find a list with all supported encryption modes together with the constants that are defines for the encryption mode. For a more complete reference and discussion see Applied Cryptography by Schneier (ISBN 0-471-11709-9).

MCRYPT_MODE_ECB (electronic codebook) is suitable for random data, such as encrypting other keys. Since data there is short and random, the disadvantages of ECB have a favorable negative effect.

MCRYPT_MODE_CBC (cipher block chaining) is especially suitable for encrypting files where the security is increased over ECB significantly.

MCRYPT_MODE_CFB (cipher feedback) is the best mode for encrypting byte streams where single bytes must be encrypted.

MCRYPT_MODE_OFB (output feedback, in 8bit) is comparable to CFB, but can be used in applications where error propagation cannot be tolerated. It’s insecure (because it operates in 8bit mode) so it is not recommended to use it.

MCRYPT_MODE_NOFB (output feedback, in nbit) is comparable to OFB, but more secure because it operates on the block size of the algorithm.

MCRYPT_MODE_STREAM is an extra mode to include some stream algorithms like WAKE or RC4.

Some other mode and random device constants:

Here is a list of ciphers which are currently supported by the mcrypt extension. For a complete list of supported ciphers, see the defines at the end of mcrypt.h . The general rule with the mcrypt-2.2.x API is that you can access the cipher from PHP with MCRYPT_ciphername. With the libmcrypt-2.4.x and libmcrypt-2.5.x API these constants also work, but it is possible to specify the name of the cipher as a string with a call to mcrypt_module_open() .

MCRYPT_ARCFOUR_IV (libmcrypt > 2.4.x only)

MCRYPT_ARCFOUR (libmcrypt > 2.4.x only)

MCRYPT_DES_COMPAT (libmcrypt 2.2.x only)

MCRYPT_ENIGMA (libmcrypt > 2.4.x only, alias for MCRYPT_CRYPT)

MCRYPT_LOKI97 (libmcrypt > 2.4.x only)

MCRYPT_MARS (libmcrypt > 2.4.x only, non-free)

MCRYPT_PANAMA (libmcrypt > 2.4.x only)

MCRYPT_RIJNDAEL_128 (libmcrypt > 2.4.x only)

MCRYPT_RIJNDAEL_192 (libmcrypt > 2.4.x only)

MCRYPT_RIJNDAEL_256 (libmcrypt > 2.4.x only)

MCRYPT_RC4 (libmcrypt 2.2.x only)

MCRYPT_RC6 (libmcrypt > 2.4.x only)

MCRYPT_RC6_128 (libmcrypt 2.2.x only)

MCRYPT_RC6_192 (libmcrypt 2.2.x only)

MCRYPT_RC6_256 (libmcrypt 2.2.x only)

MCRYPT_SAFERPLUS (libmcrypt > 2.4.x only)

MCRYPT_SERPENT(libmcrypt > 2.4.x only)

MCRYPT_SERPENT_128 (libmcrypt 2.2.x only)

MCRYPT_SERPENT_192 (libmcrypt 2.2.x only)

MCRYPT_SERPENT_256 (libmcrypt 2.2.x only)

MCRYPT_SKIPJACK (libmcrypt > 2.4.x only)

MCRYPT_TEAN (libmcrypt 2.2.x only)

MCRYPT_TRIPLEDES (libmcrypt > 2.4.x only)

MCRYPT_TWOFISH (for older mcrypt 2.x versions, or mcrypt > 2.4.x )

MCRYPT_TWOFISH128 (TWOFISHxxx are available in newer 2.x versions, but not in the 2.4.x versions)

MCRYPT_WAKE (libmcrypt > 2.4.x only)

MCRYPT_XTEA (libmcrypt > 2.4.x only)

You must (in CFB and OFB mode) or can (in CBC mode) supply an initialization vector (IV) to the respective cipher function. The IV must be unique and must be the same when decrypting/encrypting. With data which is stored encrypted, you can take the output of a function of the index under which the data is stored (e.g. the MD5 key of the filename). Alternatively, you can transmit the IV together with the encrypted data (see chapter 9.3 of Applied Cryptography by Schneier (ISBN 0-471-11709-9) for a discussion of this topic).

Mcrypt can be used to encrypt and decrypt using the above mentioned ciphers. If you linked against libmcrypt-2.2.x, the four important mcrypt commands ( mcrypt_cfb() , mcrypt_cbc() , mcrypt_ecb() , and mcrypt_ofb() ) can operate in both modes which are named MCRYPT_ENCRYPT and MCRYPT_DECRYPT, respectively.

Пример 1. Encrypt an input value with TripleDES under 2.2.x in ECB mode

= «this is a secret key» ;
$input = «Let us meet at 9 o’clock at the secret place.» ;

$encrypted_data = mcrypt_ecb ( MCRYPT_3DES , $key , $input , MCRYPT_ENCRYPT );
?>

This example will give you the encrypted data as a string in $encrypted_data .

If you linked against libmcrypt 2.4.x or 2.5.x, these functions are still available, but it is recommended that you use the advanced functions.

Пример 2. Encrypt an input value with TripleDES under 2.4.x and higher in ECB mode

= «this is a secret key» ;
$input = «Let us meet at 9 o’clock at the secret place.» ;

$td = mcrypt_module_open ( ‘tripledes’ , » , ‘ecb’ , » );
$iv = mcrypt_create_iv ( mcrypt_enc_get_iv_size ( $td ), MCRYPT_RAND );
mcrypt_generic_init ( $td , $key , $iv );
$encrypted_data = mcrypt_generic ( $td , $input );
mcrypt_generic_deinit ( $td );
mcrypt_module_close ( $td );
?>

This example will give you the encrypted data as a string in $encrypted_data . For a full example see mcrypt_module_open() .

I have modified the xor-encryption of Anonymous. It is now returning and eating base64-encoded strings. That’s much better for saving and transporting (e.g. saving in a database) the encrypted string.

function encrypt ( $string , $key ) <
$result = » ;
for( $i = 0 ; $i strlen ( $string ); $i ++) <
$char = substr ( $string , $i , 1 );
$keychar = substr ( $key , ( $i % strlen ( $key ))- 1 , 1 );
$char = chr ( ord ( $char )+ ord ( $keychar ));
$result .= $char ;
>

return base64_encode ( $result );
>

function decrypt ( $string , $key ) <
$result = » ;
$string = base64_decode ( $string );

for( $i = 0 ; $i strlen ( $string ); $i ++) <
$char = substr ( $string , $i , 1 );
$keychar = substr ( $key , ( $i % strlen ( $key ))- 1 , 1 );
$char = chr ( ord ( $char )- ord ( $keychar ));
$result .= $char ;
>

Re: Just a followup note about mcrypt java interop (have a php app encrypting a string and a java app decrypting it — and vice-versa!)

Sorry, the PHP had a bug and should have been the following:

$dlen = strlen($data);
$pad = 16 — fmod($dlen, 16); //change here
if ($pad > 0) <
$i = (int)$pad;
while ($i > 0) <
$data.=» «;
$i—;
>
>

Just a followup note about mcrypt java interop (have a php app encrypting a string and a java app decrypting it — and vice-versa!)

it seems that mcrypt pads with nulls (0x00) instead of spaces so to allow the interop to work properly (where both java and php/mcrypt encode strings to the same value) — I padded the PHP strings with spaces first before encrypting and did the same on the Java side — thus the padding was the same on each side and the interop is complete. Here’s sample PHP for padding:

$dlen = strlen($data);
$pad = fmod($dlen, 16);
if ($pad > 0) <
$i = (int)$pad;
while ($i > 0) <
$data.=» «;
$i—;
>
>

and here’s the Java padding:

public static String PadString(String in) <
int slen = (in.length() % 16);
int i = (16 — slen);
if ((i > 0) && (i 0; i—) <
buf.append(» «);
>
return buf.toString();
>
else <
return in;
>
>

With trimming on each side for decryption . all works well.

I was creating a cross-platform (unix + windows) application and ran into some issues with different versions of mcrypt (2.4.x vs 2.5.x) not working with Windows. After further investigation, I found the following:

Libmcrypt 2.5.7 is not usable with PHP 4.x.

The reason is a very Windows-specific issue. DLLs are Windows’ way of providing shared code — things get loaded once into RAM and are guaranteed identical across all applications that use them. When an application references a routine/function in a DLL, it may do so either by function name or by reference number. Referring to a routine by name is considered slow by some people and does slow down the startup of applications that use large numbers of routines in DLLs (applications such as PHP). Referring to a routine by reference number is very quick but breaks if a new DLL version changes the reference number assignments for its routines.

Libmcrypt 2.5.6 & 7’s DLLs do not have the same reference number assignments as old Libmcrypt.dll files did. Specifically, function 148 (mdecrypt_generic) has been moved in 2.5.6/7 to number 149 due to the addition of the mcrypt_mutex_register function which moved everything above it alphebetically up a reference number. PHP’s php_mcrypt.dll, which provides the PHP language bindings to the low-level Libmcrypt.dll, refers to Libmcrypt.dll’s functions by number instead of name. PHP 4.x’s php_mcrypt.dll refers to function 148 while PHP 5.0’s php_mcrypt.dll refers to function 149 and notes that PHP 5.0 under Windows can only work with Libmcrypt 2.5.6 and higher (because function 149 in old Libmcrypt is actually the Panama encryption algorithm, not the expected mcrypt_generic routine).

So, unless you can find a PHP 4.x php_mcrypt.dll that has been compiled for Libmcrypt 2.5.6 and higher, PHP 4.x won’t be able to decrypt data with Libmcrypt 2.5.7 under Windows.

TO:
16-Feb-2005 01:53

No key is ever truely random, thus it is breakable.

amiller of connext point net is correct. The ‘one-time pad’ is unbreakable, if used correctly. Correct use requires that:
1. the key length equals or exceeds the data length
2. the key must not be used more than once to encrypt data
3. the key must be truly random.

The last point is a bit of a problem. «Random Number Generator» algorithms are only pseudo-random. Once the attacker finds out which PRNG was used, breaking the encryption becomes easy. Hardware solutions for the generation of random data (like, sampling noise via the sound card input and taking the LSB) have also proven to be of dubious quality.

Violation of point 2 makes the encryption worthless. A known-plaintext attack will reveal the key at once.

Attention when using keys longer than the actual key size (i.e. 160 bit instead of 128 bit).

It will work inbetween PHP scripts, but might cause problems when using openssl or other packages with this integration of mcrypt. Cut them always to the supported size (mcrypt_enc_get_key_size) to avoid sleepless hours.

Or, if you don’t have the mcrypt library, you can just use these functions:

function Encrypt ( $string , $key )
<
$result = » ;
for( $i = 1 ; $i strlen ( $string ); $i ++)
<
$char = substr ( $string , $i — 1 , 1 );
$keychar = substr ( $key , ( $i % strlen ( $key ))- 1 , 1 );
$char = chr ( ord ( $char )+ ord ( $keychar ));
$result .= $char ;
>
return $result ;
>

function Decrypt ( $string , $key )
<
$result = » ;
for( $i = 1 ; $i strlen ( $string ); $i ++)
<
$char = substr ( $string , $i — 1 , 1 );
$keychar = substr ( $key , ( $i % strlen ( $key ))- 1 , 1 );
$char = chr ( ord ( $char )- ord ( $keychar ));
$result .= $char ;
>
return $result ;
>
?>

It’s very simple encryption, but as long as the key stays secret, very powerful.

Just a note about mcrypt java interop (have a php app encrypting a string and a java app decrypting it)

php mcrypt pads the plaintext with spaces until the plaintext is a multiple of the block size (e.g 16 for most symmetric ciphers). These spaces have to be stripped on when decrypting on the java side. Seems to be no other way of using a sensible padding (e.g. with PKCS #5) on the mcrypt side.

The following php and java will interop

$cipher = «rijndael-128»;
$mode = «cbc»;
echo «CIPHER: $cipher | MODE: $mode\n»;

// data,key, iv
$data = «blah»;
$key = «01234567890abcdef»;
$iv = «fedcba9876543210»;

// set up and encyrpt
$td = mcrypt_module_open($cipher, «», $mode, $iv);
mcrypt_generic_init($td, $key, $iv);
$encrypted_data = mcrypt_generic($td, $data);
echo bin2hex($encrypted_data);

// tear down
mcrypt_generic_deinit($td);
mcrypt_module_close($td);

Cipher cipher = Cipher.getInstance(«AES/CBC/NoPadding»);
SecretKeySpec keySpec = new SecretKeySpec(«01234567890abcdef».getBytes(), «AES»);
IvParameterSpec ivSpec = new IvParameterSpec(«fedcba9876543210».getBytes());

cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec);
byte[] outText = cipher.doFinal(fromHexString(input));
System.out.println(new String(outText).trim());

This is a modified version of a previous script that test the algorithms and modes of mcrypt dll. This new script prints out the result in a table and avoid warnings to be printed.

/* run a self-test through every listed cipher and mode */
function mcrypt_check_sanity () <
$modes = mcrypt_list_modes ();
$algorithms = mcrypt_list_algorithms ();
echo »

» ;
echo »

» ;
foreach ( $modes as $mode ) echo »

» ;
echo «

» ;
foreach ( $algorithms as $cipher ) <
echo »

» ;
if( mcrypt_module_self_test ( $cipher )) <
print »

» ;
> else <
print »

» ;
>
foreach ( $modes as $mode ) <
if( $mode == ‘stream’ ) <
$result = »

» ;
> else if( mcrypt_test_module_mode ( $cipher , $mode )) <
$result = »

» ;
> else <
$result = »

» ;
>
print $result ;
>
echo «

» ;
>
echo «

Algorithm Status » . strtoupper ( $mode ). «
» . strtoupper ( $cipher ). « OK NOT OK NOT TESTED OK NOT OK

» ;
>

// a variant on the example posted in mdecrypt_generic
function mcrypt_test_module_mode ( $module , $mode ) <
/* Data */
$key = ‘this is a very long key, even too long for the cipher’ ;
$plain_text = ‘very important data’ ;

/* Open module, and create IV */
$td = mcrypt_module_open ( $module , » , $mode , » );
$key = substr ( $key , 0 , mcrypt_enc_get_key_size ( $td ));
$iv_size = mcrypt_enc_get_iv_size ( $td );
$iv = mcrypt_create_iv ( $iv_size , MCRYPT_RAND );

/* Initialize encryption handle */
if ( mcrypt_generic_init ( $td , $key , $iv ) != — 1 ) <

/* Encrypt data */
$c_t = mcrypt_generic ( $td , $plain_text );
mcrypt_generic_deinit ( $td );

// close the module
mcrypt_module_close ( $td );

/* Reinitialize buffers for decryption */
/* Open module */
$td = mcrypt_module_open ( $module , » , $mode , » );
$key = substr ( $key , 0 , mcrypt_enc_get_key_size ( $td ));

mcrypt_generic_init ( $td , $key , $iv );
$p_t = trim ( mdecrypt_generic ( $td , $c_t )); //trim to remove padding

/* Clean up */
mcrypt_generic_end ( $td );
mcrypt_module_close ( $td );
>

if ( strncmp ( $p_t , $plain_text , strlen ( $plain_text )) == 0 ) <
return TRUE ;
> else <
return FALSE ;
>
>

// function call:
@ mcrypt_check_sanity ();
?>

Changing the function as such seems to greatly help.
function encrypt ( $encrypt ) <
global $key ;
srand ((double) microtime () * 1000000 ); //for sake of MCRYPT_RAND
$iv = mcrypt_create_iv ( mcrypt_get_iv_size ( MCRYPT_RIJNDAEL_256 , MCRYPT_MODE_ECB ), MCRYPT_RAND );
$passcrypt = mcrypt_encrypt ( MCRYPT_RIJNDAEL_256 , $key , $encrypt , MCRYPT_MODE_ECB , $iv );
$encode = base64_encode ( $passcrypt );
return $encode ;
>
?>
by adding:
((double) microtime () * 1000000 ); //for sake of MCRYPT_RAND
?>
which I guess seeds the encryption routine differently everytime.

The Algorithm posted by:
Mike Zaccari
29-Jun-2004 03:54
«I’m running PHP 4.3.7 on Apache 2.0.49 on an Xp machine, and after many hours of googling over the internet I found that the easiest way to use the mcrypt function was to do this:»

Thanks for posting this Mike but there seems to be a problem
with your implementation.
On my machine and I suspect others, the output is independent
of the key. I can change the key and this has no effect on
the resulting crypted data. So the input is always encrypted the
same way irregardless of the key and therefore decrypted
with any key.
This would only be secure if an attacker knew nothing about the
algorithm which seems unlikely from an experienced attacker.
I am looking into a fix and will post if resolved.
Does anybody else have this problem? I want to make sure my install is good.
I am running on a gentoo linux box.
Thanks,
Wil

Here is the code I am using to test the algorithm:

if(!empty( $_REQUEST [ ‘input’ ])) <
$encrypted = encrypt ( $_REQUEST [ ‘input’ ]);
$decrypted = decrypt ( $encrypted );

echo «Encrypted : ‘$encrypted’ Decrypted: ‘$decrypted’
» ;
>

$key = $_REQUEST [ ‘key’ ];

//Encrypt Function
function encrypt ( $encrypt ) <
global $key ;
$iv = mcrypt_create_iv ( mcrypt_get_iv_size ( MCRYPT_RIJNDAEL_256 , MCRYPT_MODE_ECB ), MCRYPT_RAND );
$passcrypt = mcrypt_encrypt ( MCRYPT_RIJNDAEL_256 , $key , $encrypt , MCRYPT_MODE_ECB , $iv );
$encode = base64_encode ( $passcrypt );
return $encode ;
>

//Decrypt Function
function decrypt ( $decrypt ) <
global $key ;
$decoded = base64_decode ( $decrypt );
$iv = mcrypt_create_iv ( mcrypt_get_iv_size ( MCRYPT_RIJNDAEL_256 , MCRYPT_MODE_ECB ), MCRYPT_RAND );
$decrypted = mcrypt_decrypt ( MCRYPT_RIJNDAEL_256 , $key , $decoded , MCRYPT_MODE_ECB , $iv );
return $decrypted ;
>
?>

Use of undefined constant MCRYPT_RIJNDAEL_128 — assumed ‘MCRYPT_RIJNDAEL_128’

I have successfully installed Laravel, but after running php artisan serve and going to localhost:8000 I get this error:

Use of undefined constant MCRYPT_RIJNDAEL_128 — assumed ‘MCRYPT_RIJNDAEL_128’

I have checked phpinfo() on localhost:8888 and it says that mcrypt is properly installed. However the only thing I can think of is that maybe my path is wrong?

in my .bash_profile I have

Every time I try to run Laravel commands I have to type this in the terminal:

I am running on a Mac. Is there a simple way I can set up my bash_profile so that I can consistently change between localhost addresses and still have all the proper PHP functions working?

7 Answers 7

This problem relative to the PHP extensions loader. You no need to use laravel command at all after successful installation. Laravel framework need Mcrypt Library for the security module and encrypt some of configure file.

The things that you need is theses steps.

then configure make and install it.

Download php http://php.net/releases/index.php Above 5.5.14 are suggested. (Use this path later on step 4)

then download Autoconfigure

then you have to go to directory level

and run phpize within this directory level

modify your php.ini to enable the mcrypt extension by insert this into php.ini

More simple way on ubuntu

  • apt-get install php5-mcrypt
  • mv -i /etc/php5/conf.d/mcrypt.ini /etc/php5/mods-available/
  • php5enmod mcrypt
  • service apache2 restart

Note: if you don’t have «/etc/php5/conf.d» just skip that step and it will work ok

For Mac users’s specially — install it using Home Brew

I’ve installed an empty Laravel installation and got the following error message when navigating to http://localhost/kanban/public/:

Notice: Use of undefined constant MCRYPT_RIJNDAEL_128 – assumed ‘MCRYPT_RIJNDAEL_128′ in /Library/WebServer/Documents/xxx/config/app.php on line 83

Googling for this error message return many tutorials on how to install mcrypt on Mac OS X (whether building it from source or using Homebrew). The problem was that both the mcrypt and the php55-mcrypt packages were properly installed:

Mcrypt was also properly loaded by PHP:

If you are seeing this on ubuntu or other flavors of *nix , it might help to do the following:

I just adjusted the .bash_profile in MacOS and it worked:

I also had this problem in trying to deploy a Laravel to Apache on Mac OS Sierra . I eventually found this post that gave step-by-step instructions to resolve this issue. These instructions assume that you have Homebrew installed; if you don’t have it installed, then paste the following into a Terminal window to install it:

Here is the relevant steps pasted from the post given above:

Step 1: Install autoconf and mcrypt

I used homebrew to install autoconf and mcrypt, which is as easy as:

If this does not work for you, or you don’t want to use homebrew, then check out this tutorial.

Step 2: Build the PHP extension

To build the PHP extension you will need the PHP 5.4.17 source code that is available for download here and extract it:

Then build the extension using the following commands:

Step 3: Enable the extension

All that is left is to enable the extension by editing /etc/php.ini. If this file is not present, copy /etc/php.ini.default and rename it:

Edit the /etc/php.ini file and add the following:

Step 4: Restart apache Now just restart apache and you’re done!

ADDITIONAL NOTES AND CLARIFICATION

I did encounter two issues with following these steps:

  1. I had to match the PHP zip file that I downloaded to the version of PHP that was installed on my machine.

to determine the version number and then changed the download to match that version number. In my case the PHP version was 5.6.28 and so I needed to download the PHP source from

  1. I got an exception at step 2 when I tried to do the sudo make install , the exception was caused by SIP, a security featured added by El Capitan . The exception is outlined in this question, and the resolution to this problem I found in this answer.

Applying the information from this answer changed the step 2 listed above and replaced the sudo make install with the following:

Предопределённые константы mcrypt

Частная коллекция качественных материалов для тех, кто делает сайты

  • Фотошоп-мастер2000+ уроков по фотошопу
  • Фото-монстр300+ уроков для фотографов
  • Видео-смайл200+ уроков по видеообработке
  • Жизнь в стиле «Кайдзен» Техники и приемы для гармоничной и сбалансированной жизни

В этом разделе помещены уроки по PHP скриптам, которые Вы сможете использовать на своих ресурсах.

Фильтрация данных с помощью zend-filter

Когда речь идёт о безопасности веб-сайта, то фраза «фильтруйте всё, экранируйте всё» всегда будет актуальна. Сегодня поговорим о фильтрации данных.

Контекстное экранирование с помощью zend-escaper

Обеспечение безопасности веб-сайта — это не только защита от SQL инъекций, но и протекция от межсайтового скриптинга (XSS), межсайтовой подделки запросов (CSRF) и от других видов атак. В частности, вам нужно очень осторожно подходить к формированию HTML, CSS и JavaScript кода.

Подключение Zend модулей к Expressive

Expressive 2 поддерживает возможность подключения других ZF компонент по специальной схеме. Не всем нравится данное решение. В этой статье мы расскажем как улучшили процесс подключение нескольких модулей.

Совет: отправка информации в Google Analytics через API

Предположим, что вам необходимо отправить какую-то информацию в Google Analytics из серверного скрипта. Как это сделать. Ответ в этой заметке.

Подборка PHP песочниц

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

Совет: активация отображения всех ошибок в PHP

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

Агент

PHP парсер юзер агента с поддержкой Laravel, работающий на базе библиотеки Mobile Detect.

Константы в PHP

Привет. Сегодня решил написать о константах в PHP. Расскажу как константы работают, какие чаще всего применяются и бывают .

Что такое константы в контексте PHP?

Константы — это по сути переменные у которых нельзя переопределить значение. Т.е после указания их значения вы больше не сможете его менять по ходу выполнения скрипта. Они как правило пишутся в верхнем регистре и в названии конкретно отражают хранимую в них информацию.

В PHP существует 2 разновидности констант:

  1. Обычные (задаются программистом)
  2. Предопределенные (задаются интерпретатором)

Обычные константы

Такой тип констант обычно используются как правило для служебных целей и создаются программистом в процессе написание кода.
Синтаксис создания обычной константы:

Создание константы происходит с помощью встроенной конструкции define (‘Имя константы’,’Значение константы’).

Для краткого пояснения механизма работы с константами покажу пример того что значения в константах задается один раз, и более не может быть изменено:

Для того чтобы проверить существование константы в языке предусмотрена функция defined («CONST_NAME»).

Предопределенные константы

Предопределенные константы отличаются от обычных способом создания. Они устанавливаются самим интерпретатором и меняют свое значение в контексте выполнения программы. Так же они не чувствительны к регистру, __CLASS__ или __class__ будут прекрасно выполнены интерпретатором.

Вот самые часто используемые предопределенные константы:

  • __FILE__ — хранит имя выполняемого на данный момент скрипта.
  • __FUNCTUIN__ — имя текущей функции.
  • __CLASS__ — имя текущего класса.
  • PHP_VERSION — содержит версию интерпретатора PHP.
  • TRUE, FALSE, NULL — содержат в себе значения соответствующие своему названию.

Для примера работы таких констант посмотрим на использование одной из них — __FUNCTION__ :

Как можно видеть из примера константа __function__ вернула имя функции в которой она была первоначально вызвана — abc ().

И да, константу невозможно удалить как обычную переменную функцией unset (), она существует от начала и до конца выполнения программы.

На этом все, желаю успешной практики и хорошего настроения. До скорого.

dmkweb.ru Права на контент защищены.

Подписаться на обновления блога

Использование неопределенной константы MCRYPT_BLOWFISH

После переустановки нашего сервера MCRYPT больше не работает, и PHP дает уведомление «Использование неопределенной константы MCRYPT_BLOWFISH» (Apache 2.4, PHP 5.5).

Почему mcrypt не распознается? Как я могу сделать эту работу?

Как только я говорю, я нахожу решение, хе-хе.

Это сработало для меня: mCrypt не присутствует после обновления Ubuntu до 13.10

необходимо было: sudo php5enmod mcrypt

даже если он, похоже, уже включен, он исправил его.

Когда я пытаюсь включить метод Express Paypal, я столкнулся с этой ошибкой.

Ошибка: использование неопределенной константы MCRYPT_BLOWFISH – предполагается «MCRYPT_BLOWFISH» в /var/www/…/lib/Varien/Crypt/Mcrypt.php в строке 56

Во-первых, мы можем запустить этот cmd, чтобы проверить, работает ли mcrypt или нет:

Если mcrypt не включен, мы можем использовать следующее, чтобы включить его, как и другие, упомянутые

Кроме того, нам было лучше проверить установленный пакет php5-mcrypt или нет

Хотя, если вы устанавливаете fastcgi и php-fpm, как мы, мы должны перезапустить службу php-fpm и службу apache2.

22.9.3.6. Предопределенные Константы

Константы ниже определяются этим расширением, andwill только быть доступными, когда у расширения есть eitherbeen, скомпилированный в PHP или динамически загруженный во времени выполнения.

Считайте опции из именованной группы от my.cnf или файл, определенный с MYSQLI_READ_DEFAULT_FILE

Считайте опции из именованного файла опции вместо от my.cnf

Соедините тайм-аут в секундах

Включает команде LOAD LOCAL INFILE

Команда, чтобы выполниться, соединяясь с сервером MySQL. Будет автоматически повторно выполняться, повторно соединяясь.

Используйте SSL (зашифрованный протокол). Эта опция не должна быть установлена прикладными программами; это устанавливается внутренне в клиентской библиотеке MySQL

Используйте протокол сжатия

Позволить interactive_timeout секунды (вместо wait_timeout секунды) неактивности прежде, чем закрыть соединение. Сеанс клиента wait_timeout переменная будет установлена в значение сеанса interactive_timeout переменная.

Позвольте пробелы после имен функций. Делает все зарезервированные слова имен функций.

Не позволяйте db_name.tbl_name.col_name синтаксис.

Позволяет многократные разграниченные точкой с запятой запросы в сингле mysqli_query вызвать.

Для того, чтобы использовать буферизованные наборы результатов

Для того, чтобы использовать небуферизованные наборы результатов

Столбцы возвращаются в массив, имеющий имя поля, поскольку массив индексирует.

Столбцы возвращаются в массив, имеющий перечислимое, индексируют.

Столбцы возвращаются в массив, имеющий и числовое, индексируют и имя поля, как ассоциативные индексируют.

Указывает, что поле определяется как NOT NULL

Поле является частью основного устройства, индексируют

Поле является частью уникального индекса.

Поле является частью индексирования.

Поле определяется как BLOB

Поле определяется как UNSIGNED

Поле определяется как ZEROFILL

Поле определяется как AUTO_INCREMENT

Поле определяется как TIMESTAMP

Поле определяется как SET

Поле определяется как NUMERIC

Поле является частью мультииндексирования

Поле является частью GROUP BY

Поле определяется как DECIMAL

Математика точности DECIMAL или NUMERIC поле (MySQL 5.0.3 и)

Поле определяется как BIT (MySQL 5.0.3 и)

Поле определяется как TINYINT

Поле определяется как SMALLINT

Поле определяется как INT

Поле определяется как FLOAT

Поле определяется как DOUBLE

Поле определяется как DEFAULT NULL

Поле определяется как TIMESTAMP

Поле определяется как BIGINT

Поле определяется как MEDIUMINT

Поле определяется как DATE

Поле определяется как TIME

Поле определяется как DATETIME

Поле определяется как YEAR

Поле определяется как DATE

Поле определяется как INTERVAL

Поле определяется как ENUM

Поле определяется как SET

Поле определяется как TINYBLOB

Поле определяется как MEDIUMBLOB

Поле определяется как LONGBLOB

Поле определяется как BLOB

Поле определяется как VARCHAR

Поле определяется как CHAR или BINARY

Поле определяется как TINYINT . Для CHAR , см. MYSQLI_TYPE_STRING

Поле определяется как GEOMETRY

Больше доступных данных для связывает переменную

Больше доступных данных для не связывает переменную

Усечение данных произошло. Доступный начиная с PHP 5.1.0 и MySQL 5.0.5.

Поле определяется как ENUM . Доступный начиная с PHP 5.3.0.

Поле определяется как BINARY . Доступный начиная с PHP 5.3.0.

Отчет, если не индексируют или плохо индексируют, использовался в запросе.

Ошибки отчета от mysqli вызовов функции.

Бросок a mysqli_sql_exception для ошибок вместо предупреждений.

Установите все опции на (сообщите обо всех).

Выключает создание отчетов.

Устанавливается в 1 если mysqli_debug функциональность добавляется.

Обновляет таблицы предоставления.

Сбрасывает журналы, как выполнение FLUSH LOGS SQL-оператор .

Сбрасывает табличный кэш, как выполнение FLUSH TABLES SQL-оператор .

Сбрасывает кэш узла, как выполнение FLUSH HOSTS SQL-оператор .

Сбросьте переменные состояния, как выполнение FLUSH STATUS SQL-оператор .

Сбрасывает кэш потока.

На ведомом сервере репликации: сбрасывает информацию о главном сервере, и перезапускает ведомое устройство. Как выполнение RESET SLAVE SQL-оператор .

На главном сервере репликации: удаляет двоичные файлы журнала, перечисленные в двоичном журнале, индексируют, и усекает индексный файл. Как выполнение RESET MASTER SQL-оператор .

Добавляет «И НИКАКАЯ ЦЕПОЧКА» к mysqli_commit или mysqli_rollback .

Илон Маск рекомендует:  Анализ статистики базы данных interbasefirebird
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL