В процессе изучения ооп в 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
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Как определить, хук woocommerce_checkout_order_processed вызывается в хуке init или wp или где ещё? Как можно проследить цепочку вызовов?
Что нужно сделать, чтобы код, приведенный ниже, работал на форме моего сайте с использованием djangо
У мен на сайте есть попап, который на десктопе всплывает, когда мы уводим мышку вверх и только 2 раза, с разницей в 3 минуты, а на тач-устройствах...