mcrypt_generic_init

(PHP 4 >= 4.0.2, PHP 5, PHP 7 < 7.2.0, PECL mcrypt >= 1.0.0)

mcrypt_generic_initФункция инициализирует все буферы, необходимые для шифрования

Внимание

Эта функция объявлена УСТАРЕВШЕЙ начиная с PHP 7.1.0 и была УДАЛЕНА в версии PHP 7.2.0. Использовать эту функцию крайне не рекомендуется.

Описание

mcrypt_generic_init(resource $td, string $key, string $iv): int

Вы должны вызывать эту функцию перед любым вызовом mcrypt_generic() или mdecrypt_generic().

Список параметров

td

Дескриптор шифрования.

key

Максимальная длина ключа должна быть получена с помощью функции mcrypt_enc_get_key_size() и любое меньшее значение допустимо.

iv

Обычно размер инициализирующего вектора(IV) должен совпадать с размером блока, но вы всё равно должны получить это значение с помощью функции mcrypt_enc_get_iv_size(). IV игнорируется в ECB. IV ДОЛЖЕН присутствовать в режимах CFB, CBC, STREAM, nOFB и OFB. Он должен быть случайным и уникальным (но не обязательно секретным). Один и тот же IV должен использоваться как при шифровании так и при дешифровке. Если вы не хотите его использовать - просто установите его равным нулю, но так поступать не рекомендуется.

Возвращаемые значения

В случае возникновения ошибки эта функция возвращает отрицательное число: -3 если длина ключа некорректна, -4 если возникли проблемы с выделением памяти, а любое другое значение обозначает неизвестную ошибку. Также, в случае любой ошибки будет вызвано предупреждение. если переданы некорректные параметры, будет возвращено false.

Смотрите также

  • mcrypt_module_open() - Открывает модуль шифрования с использованием указанных алгоритма и режима

add a note add a note

User Contributed Notes 1 note

up
0
Anonymous
11 years ago
The mcrypt implementation of RC2 algorithm supports an effective key length of 1024 bits only.
It is however possible to use an effective key length in 1..1024 bits, by transforming the key before use as follows:

<?php

function transformKey($key, $effKeyLen)

{
   
$pitable = array(
       
0xD9, 0x78, 0xF9, 0xC4, 0x19, 0xDD, 0xB5, 0xED, 0x28, 0xE9, 0xFD, 0x79, 0x4A, 0xA0, 0xD8, 0x9D,
       
0xC6, 0x7E, 0x37, 0x83, 0x2B, 0x76, 0x53, 0x8E, 0x62, 0x4C, 0x64, 0x88, 0x44, 0x8B, 0xFB, 0xA2,
       
0x17, 0x9A, 0x59, 0xF5, 0x87, 0xB3, 0x4F, 0x13, 0x61, 0x45, 0x6D, 0x8D, 0x09, 0x81, 0x7D, 0x32,
       
0xBD, 0x8F, 0x40, 0xEB, 0x86, 0xB7, 0x7B, 0x0B, 0xF0, 0x95, 0x21, 0x22, 0x5C, 0x6B, 0x4E, 0x82,
       
0x54, 0xD6, 0x65, 0x93, 0xCE, 0x60, 0xB2, 0x1C, 0x73, 0x56, 0xC0, 0x14, 0xA7, 0x8C, 0xF1, 0xDC,
       
0x12, 0x75, 0xCA, 0x1F, 0x3B, 0xBE, 0xE4, 0xD1, 0x42, 0x3D, 0xD4, 0x30, 0xA3, 0x3C, 0xB6, 0x26,
       
0x6F, 0xBF, 0x0E, 0xDA, 0x46, 0x69, 0x07, 0x57, 0x27, 0xF2, 0x1D, 0x9B, 0xBC, 0x94, 0x43, 0x03,
       
0xF8, 0x11, 0xC7, 0xF6, 0x90, 0xEF, 0x3E, 0xE7, 0x06, 0xC3, 0xD5, 0x2F, 0xC8, 0x66, 0x1E, 0xD7,
       
0x08, 0xE8, 0xEA, 0xDE, 0x80, 0x52, 0xEE, 0xF7, 0x84, 0xAA, 0x72, 0xAC, 0x35, 0x4D, 0x6A, 0x2A,
       
0x96, 0x1A, 0xD2, 0x71, 0x5A, 0x15, 0x49, 0x74, 0x4B, 0x9F, 0xD0, 0x5E, 0x04, 0x18, 0xA4, 0xEC,
       
0xC2, 0xE0, 0x41, 0x6E, 0x0F, 0x51, 0xCB, 0xCC, 0x24, 0x91, 0xAF, 0x50, 0xA1, 0xF4, 0x70, 0x39,
       
0x99, 0x7C, 0x3A, 0x85, 0x23, 0xB8, 0xB4, 0x7A, 0xFC, 0x02, 0x36, 0x5B, 0x25, 0x55, 0x97, 0x31,
       
0x2D, 0x5D, 0xFA, 0x98, 0xE3, 0x8A, 0x92, 0xAE, 0x05, 0xDF, 0x29, 0x10, 0x67, 0x6C, 0xBA, 0xC9,
       
0xD3, 0x00, 0xE6, 0xCF, 0xE1, 0x9E, 0xA8, 0x2C, 0x63, 0x16, 0x01, 0x3F, 0x58, 0xE2, 0x89, 0xA9,
       
0x0D, 0x38, 0x34, 0x1B, 0xAB, 0x33, 0xFF, 0xB0, 0xBB, 0x48, 0x0C, 0x5F, 0xB9, 0xB1, 0xCD, 0x2E,
       
0xC5, 0xF3, 0xDB, 0x47, 0xE5, 0xA5, 0x9C, 0x77, 0x0A, 0xA6, 0x20, 0x68, 0xFE, 0x7F, 0xC1, 0xAD);
   
$invpitable = array_flip($pitable);

   
//    Apply the regular RC2 key expansion algorithm.
   
$t = strlen($key);
   
$key = array_values(unpack('C*C', $key));

    for (
$i = $t; $i < 128; $i++)
       
$key[$i] = $pitable[($key[$i - 1] + $key[$i - $t]) & 0xFF];

   
$t8 = ($effKeyLen + 7) >> 3;
   
$tm = 0xFF >> (8 * $t8 - $effKeyLen);
   
$i = 128 - $t8;
   
$key[$i] = $pitable[$key[$i] & $tm];

    while (
$i--)
       
$key[$i] = $pitable[$key[$i + 1] ^ $key[$i + $t8]];

   
//    Map the first byte: this operation will be undone by
    //        mcrypt internals.
   
$key[0] = $invpitable[$key[0]];

   
//    Return the transformed key as a string.
   
array_unshift($key, 'C*');
    return
call_user_func_array('pack', $key);
}

//    Usage example
$r = mcrypt_module_open(MCRYPT_RC2, $algoDir, $mode, $modeDir);
mcrypt_generic_init($r, transformKey($originalKey, $effectiveKeyLength), $iv);

?>
To Top