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

242
11 апреля 2022, 11:50

В процессе изучения ооп в 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

READ ALSO
В каком хуке вызывается хук woocommerce_checkout_order_processed?

В каком хуке вызывается хук woocommerce_checkout_order_processed?

Как определить, хук woocommerce_checkout_order_processed вызывается в хуке init или wp или где ещё? Как можно проследить цепочку вызовов?

198
получение значения с поля input

получение значения с поля input

Что нужно сделать, чтобы код, приведенный ниже, работал на форме моего сайте с использованием djangо

152
Jquery transform translate and rotate эффект

Jquery transform translate and rotate эффект

Как сделать такой эффект для блоков?

76
Почему после выполнения функции не происходит перезапись переменной?

Почему после выполнения функции не происходит перезапись переменной?

У мен на сайте есть попап, который на десктопе всплывает, когда мы уводим мышку вверх и только 2 раза, с разницей в 3 минуты, а на тач-устройствах...

135