@mrzgt

Почему срабатывает проверка в openssl?

Шифрую и расшифровываю данные при помощи openssl_

Не могу понять в чем проблема, сгенерированный ключ ввожу для проверки, все работает,но заметил если в ключе изменить одно значение(не во всех местах),то все равно проверка проходит

if(isset($_POST['url']))
{
$input = trim($_POST['url'], '/');
if (!preg_match('#^http(s)?://#', $input)) {
$input = 'http://' . $input;
}
$urlParts = parse_url($input);
$domain = preg_replace('/^www\./', '', $urlParts['host']);
$plaintext = serialize($domain);
$key = "myverystrongpasswordo32bitleng";
$ivlen = openssl_cipher_iv_length($cipher="AES-128-CBC");
$iv = openssl_random_pseudo_bytes($ivlen);
$ciphertext_raw = openssl_encrypt($plaintext, $cipher, $key, $options=OPENSSL_RAW_DATA, $iv);
$hmac = hash_hmac('sha256', $ciphertext_raw, $key, $as_binary=true);
$encoded = base64_encode( $iv.$hmac.$ciphertext_raw );
}


$url = str_replace('www.','', $_SERVER['SERVER_NAME']);
$key = "myverystrongpasswordo32bitleng";
//php AES-128-CBC Dec Example
$c = base64_decode($value);
$ivlen = openssl_cipher_iv_length($cipher="aes-128-cbc");
$iv = substr($c, 0, $ivlen);
$hmac = substr($c, $ivlen, $sha2len=32);
$ciphertext_raw2 = substr($c, $ivlen+$sha2len);
$original_plaintext = openssl_decrypt($ciphertext_raw2, $cipher, $key, $options=OPENSSL_RAW_DATA, $iv);
$original_plaintext = unserialize($original_plaintext);
return $original_plaintext == $url;


К примеру в полученном ключе
xP7dvKKTuZJHgNTBtQTIuINmcMVEAkIaG/nb0+Mw9IhJgMRAT1Rl6s5RP6od/UZc/aet+dp4djhGdTT2HOSO5cY/AO2+i/0VfIfMJd9/m74=

третий символ меняем с 7 на 8 и проверка почему то срабатывает и ключ подходит
  • Вопрос задан
  • 44 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы