Laravel 5.7: openssl_cipher_iv_length (): неизвестный алгоритм шифрования - PullRequest
0 голосов
/ 15 ноября 2018

Я занимаюсь разработкой приложения в Laravel Framework 5.7.13.

У меня есть класс с именем

<?php
namespace App\Library;

class Crypto{

private $cipher;
private $cstrong;
private $keylen;
private $key;


public function __Crypto(){
    $this->cipher= Config::get('cipher');
    $this->cstrong = true;
    $this->keylen = 5;
    $this->key = bin2hex(openssl_random_pseudo_bytes($keylen, $cstrong));
}

public function opensslEncrypt($value){


    $ivlen = openssl_cipher_iv_length($this->cipher);
    $iv = openssl_random_pseudo_bytes($ivlen);
    $ciphertext_raw = openssl_encrypt($value, $this->cipher, $this->key, $options=OPENSSL_RAW_DATA, $iv);
    $hmac = hash_hmac('sha256', $ciphertext_raw, $this->key, $as_binary=true);
    $ciphertext = base64_encode( $iv.$hmac.$ciphertext_raw );

    return $ciphertext ;

}
}

Теперь в моем контроллере я сделал:

$crypto = new Crypto();
$encryptedValue = $crypto->opensslEncrypt($orderId);

В моем Config \ app.php

'cipher' => 'AES-256-CBC'

Но когда я запускаю свое приложение, я получаю

ErrorException (E_WARNING) openssl_cipher_iv_length (): неизвестный алгоритм шифрования

Какчтобы решить эту проблему?

Я пытался закомментировать строку шифра в Config \ app.php, но затем он выдал некоторые другие ошибки.

Пожалуйста, помогите ...

1 Ответ

0 голосов
/ 03 января 2019

У меня возникла похожая проблема с Laravel 5.7.13.

Моя ошибка с Laravel и функцией openssl_cipher_iv_length () была обнаружена при обновлении моей установки WampServer до PHP v7.2.x (с v7.1.10). Да, я работаю в Windows.

Переключение обратно на php v7.1.10 устранит ошибку.

Чтобы решить мою ошибку с openssl_cipher_iv_length (), я сравнил файлы php.ini из двух версий php. При сравнении файлов я заметил, что у меня не правильно установлен extension_dir. Это было моей основной проблемой, но в прошлом я делал другие правки, которые также включал в новую среду PHP (т.е. включенные расширения и настройки XDEBUG).

Также ... Я заметил, что имена расширений были ранее определены как: расширение = php_ .dll

или

расширение = .so

и теперь используете:

расширение =

Так что моя проблема с openssl_cipher_iv_length () была результатом версии PHP, а не Laravel.

Надеюсь, эта информация поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...