2015-11-30 2 views
1

У нас есть некоторые устаревшие потребности в использовании функции декодирования mcrypt.Функция mcrypt работает на старом сервере не на новом

  • old sever Ubuntu Linux 10.04.1 working sample. Существует информация info.php
  • новый сервер Debian Linux 8 failing sample. Есть информация info.php

PHP версия 5.6.14-0 + deb8u1 на обоих серверах.

код PHP:

<?php 

    $salt = '[email protected]}7F^LkC[k_bx~E^'; // 
    $text = 'Our text decoeded'; 
    $encout = simple_encrypt($salt, $text); 
    echo 'encrypted: ' . $encout .'<br/>'; 
    echo 'decrypted: ' . simple_decrypt($salt, $encout) ; 


    function simple_encrypt($salt, $text) { 
    return trim(base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $salt, $text, MCRYPT_MODE_ECB, mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND)))); 
    } 

    function simple_decrypt($salt, $text) 
    { 
    return trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $salt,  base64_decode($text), MCRYPT_MODE_ECB, mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND))); 
    } 
?> 

Почему эти два Подачи быть разными?

+1

Кроме того, этот код шифрования ОЧЕНЬ небезопасен. [Режим ECB] (https://blog.filippo.io/the-ecb-penguin/), [MCRYPT_RIJNDAEL_256] (https://paragonie.com/blog/2015/05/if-you-re-typing-word -mcrypt-in-your-code-you-re-doing-it-wrong) и т. д. –

ответ

1

Это связано с тем, что ранее mcrypt принимал нестандартные ключи или iv размеры и просто размещал их с помощью \ 0 до тех пор, пока они не были правильной длины. Начиная с 5.6 (ваш старый сервер не работает 5.6, он работает под управлением 5.3), как вы можете видеть в документах, недействительные ключи и ivs больше не принимаются, а mcrypt_encrypt терпит неудачу. Кажется, что ваш ключ имеет длину 160 бит и должен быть 192 бита (следующая допустимая длина ключа). Вы можете исправить это, добавив 4 \ 0s к вашему ключу.

+0

Я бы подумал, что он имеет четыре байта 0x00 для достижения допустимого размера ключа: 192 бит. –

+0

192 бита не являются допустимым размером ключа для 256-битного ключа шифрования, такого как MCRYPT_RIJNDAEL_256. – pvg

+0

256 в 'MCRYPT_RIJNDAEL_256' означает размер блока. Rijndael поддерживает три размера блоков и три размера ключа независимо. Возможно, вы перепутали Rijndael и AES. AES - это подмножество Rijndael с фиксированным размером блока 128 бит. –

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