2016-03-31 5 views
1

Я попытался перенести свое шифрование из mcrypt в openssl, но дешифрование продолжает сбой. Код Ниже приведена моя функция шифрования. Я поместил var_dump в функцию шифрования, чтобы проверить дешифрование с использованием идентичных переменных, чего нет.openssl_decrypt всегда возвращает false

Я попытался следующие изменения в коде, никто не работал:

  • base64_decode($encrypted)
  • просто из любопытства base64_encode($encrypted)
  • все эти варианты с опциями, установленными на: 0 (значение по умолчанию), OPENSSL_RAW_DATA, OPENSSL_ZERO_PADDING

function encryptString($data){ 
    $key = "1A534"; 

    do{ 
     $iv = random_bytes(100); 
    }while(strpos($iv,"|Z|")!==false); 

    $encrypted = openssl_encrypt($data,"aes-256-gcm",$key,false,$iv); 
    var_dump(openssl_decrypt($encrypted,"aes-256-gcm",$key,OPENSSL_RAW_DATA,$iv)); 
    $output = $iv . "|Z|" . $encrypted; 
    $output = base64_encode($output); 
    return $output; 
} 

PHP версии 7.0.5-1 + deb.sury.org ~ испытанный + 1

OpenSSL версии OpenSSL 1.0.2g 1 марта 2016

Почему держит openssl_decrypt возвращение ложным? Я успешно зашифрован с теми же переменными, что и строка выше.

+1

Я думаю, что это не сработает до PHP 7.1, потому что есть ошибка с тегом аутентификации. –

+0

Правильно. Никакие шифры GCM не работают правильно. – Us3r

+0

Я использую 7.1 в этом сценарии, но все равно получаю ложное значение, возвращаемое во всех сценариях. – Dockstar

ответ

0

Это не будет работать для PHP < 7.1, поскольку AEAD не поддерживается.

Вы можете использовать the library I created (PHP 5.4+ и 7.0+).

В зависимости от среды, он будет тестировать и использовать следующие методы: - OpenSSL на PHP 7.1, - libCrypto extension, - чистая реализация PHP.

Обратите внимание, что чистый метод PHP очень медленный по сравнению с другими методами.

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