Не отрабатывает дешифрование пароля

В процессе изучения ооп в PHP. Решил реализовать класс который шифрует и дешифрует пароли. Версия PHP 7.1 В процессе дешифровки столкнулся с тем что иногда функция дешифровки выдавала false и ошибку "Setting of data length failed" также иногда был возврат false при этом варнинге: "The authenticated tag cannot be provided for cipher that doesn not support AEAD". Вот код метода который выбирает произвольный метод шифрования

 protected function selectRandMethod()
{
    $arrK = random_int(1, 181);
    $arr = openssl_get_cipher_methods();
    $key = $arr[$arrK];
    return $key;
}

Вот код метода который шифрует пароль

protected function crypted($p)
{
    $met = $this->selectRandMethod();
    $key = $this->selectRandKey();
    //$met = 'CAMELLIA-192-CFB';
    if (in_array($met, openssl_get_cipher_methods())) {
        $ivlen = openssl_cipher_iv_length($met);
        $iv = openssl_random_pseudo_bytes($ivlen);
        $cryptPassw = openssl_encrypt($p, $met, $key, $options = 0, $iv, $tag);
        $return = array(
            'p' => $cryptPassw,
            'm' => $met,
            'k' => $key,
            'o' => $options,
            'i' => $iv,
            't' => $tag
        );
        return $return;
    }
}

Вот код метода дешифровки пароля

public function decrypt($p)
{
    $crypted = $this->crypted($p);
    $pass = $crypted['p'];
    $m = $crypted['m'];
    $k = $crypted['k'];
    $o = $crypted['o'];
    $i = $crypted['i'];
    $t = $crypted['t'];
    $decryptPassw = openssl_decrypt($pass, $m, $k, $o, $i, $t);
    return $decryptPassw;
}

} Фишка в том что если в методе crypted($p); я укажу явно метод шифрования $met = 'CAMELLIA-192-CFB';, метод может быть любой, неважно - то все работает. Пересмотрел метод произвольного выбора метода шифрования - он работает, ошибок я не вижу. У меня такое ощущение что когда я вызываю метод дешифровки - он где-то теряет метод шифрования, но почему и так ли это - понять не могу.

Весь код и примеры написал сам по образцу взятому с php.net


Ответы (0 шт):