2015-09-06 3 views
0

У меня есть этот код:Шифрование данных с помощью PHP

$token = $this->hextobin($dataEncrypt); 
    $key = $this->key_192; 
    $iv = $this->iv; 
    $algorithm = 'xxxx'; 
    $mode = 'ecb'; //QUESTION!!! 
    $td = mcrypt_module_open($algorithm, '', $mode, '') ; 
    $iv = substr($iv, 0, mcrypt_enc_get_iv_size($td)); 
    $expected_key_size = mcrypt_enc_get_key_size($td); 
    $key = substr($key, 0, $expected_key_size); 
    mcrypt_generic_init($td, $key, $iv); 
    $response = trim(mdecrypt_generic($td, $token), ''); 
    mcrypt_generic_deinit($td); 
    mcrypt_module_close($td); 
    $response = explode(XXXX,$response); 
    return $response[0]; 

Но чтение документации PHP, а именно: http://php.net/manual/en/function.mcrypt-ecb.php говорит, что, таким образом, является устаревшим и рекомендовать mcrypt_generic() и mdecrypt_generic() для замены. Мой вопрос заключается в том, как использовать эти функции, если вы спросите меня так же, как в открытом режиме?

ответ

2

Для использования mcrypt_generic() объясняется здесь:

Однако я бы рекомендовал более простой API mcrypt:

Пример использования:

mcrypt_encrypt(MCRYPT_3DES, "secret key", "data to encrypt", MCRYPT_MODE_ECB); 

Я заметил, что вы были вопросительные знаки на ecb. Это "режим" для шифрования объясняется здесь:

http://php.net/manual/en/mcrypt.constants.php

Согласно PHP Docs:

  • MCRYPT_MODE_ECB (электронный кодовой книги) подходит для произвольных данных, таких как шифрование других ключи. Поскольку данные короткие и случайные, недостатки ЕЦБ имеют благоприятный негативный эффект.
  • MCRYPT_MODE_CBC (цепочки блоков шифрования) особенно подходит для шифрования файлов, где безопасность значительно увеличивается по сравнению с ЕЦБ.
  • MCRYPT_MODE_CFB (шифровальная обратная связь) - лучший режим для шифрования байтовых потоков, где должны быть зашифрованы одиночные байты.
  • MCRYPT_MODE_OFB (выходная обратная связь в 8 бит) сопоставима с CFB, но может использоваться в приложениях, где распространение ошибок нельзя допускать. Это небезопасно (потому что он работает в режиме 8 бит), поэтому его не рекомендуется использовать.
  • MCRYPT_MODE_NOFB (выходная обратная связь, в nbit) сопоставима с OFB, но более безопасна, поскольку она работает с размером блока алгоритма.
  • MCRYPT_MODE_STREAM - дополнительный режим для включения некоторых алгоритмов потока, таких как «WAKE» или «RC4».

Update Если вы используете режим CBC, не забудьте установить iv так:

$size = mcrypt_get_iv_size(MCRYPT_3DES, MCRYPT_MODE_CBC); 
$iv = mcrypt_create_iv($size, MCRYPT_DEV_RANDOM); 
echo mcrypt_encrypt(MCRYPT_3DES, "secret key", "data", MCRYPT_MODE_CBC, $iv); 
+0

Привет, но использовать MCRYPT_MODE_CBC безопасно? – ABlack

+0

зависит от вашего шифрования. Я предполагаю, что они в какой-то мере защищены. Некоторые из них более безопасны в определенных ситуациях, которые, как я предполагаю. Какие данные вы шифруете? –

+0

Я пытаюсь зашифровать только текст, например, идентификаторы моих пользователей, что я положил в $ _SESSION ['id_blablabla'] – ABlack

Смежные вопросы