Расшифровка php с URL

Я использую php decrypion для проверки того, что: адрес электронной почты, отвечающий на запрос, совпадает с адресом электронной почты, на который был отправлен запрос.

Это код, но в конце он просто не работает.

URL просто:

blah.com/page?keyemail=fSHEk8KC17siklGHsj0HJA==

Приведенный ниже код также показывает некоторые тесты, которые я сделал, чтобы убедиться, что шифрование / дешифрование работает нормально... Я повторил код вниз, чтобы увидеть, что происходит

$key="XiTo74UI09wwe4YeUmuvbL0E";

$iv = mcrypt_create_iv (mcrypt_get_block_size (MCRYPT_TripleDES, MCRYPT_MODE_CBC), MCRYPT_DEV_RANDOM);

// Encrypting
function encrypt($string, $key) {
    $enc = "";
    global $iv;
    $enc=mcrypt_cbc (MCRYPT_TripleDES, $key, $string, MCRYPT_ENCRYPT, $iv);

  return base64_encode($enc);
}

// Decrypting
function decrypt($string, $key) {
    $dec = "";
    $string = trim(base64_decode($string));
    global $iv;
    $dec = mcrypt_cbc (MCRYPT_TripleDES, $key, $string, MCRYPT_DECRYPT, $iv);
  return $dec;
}

// test example
$email = 'me@me.com';

echo "email is $email<br /><br />";

$email_key = encrypt($email, $key);

echo "key is $email_key<br /><br />";

$email_key2 = decrypt($email_key, $key);

echo "decrypted is $email_key2<br /><br />";
// END test example, all is ok


// this is the code that fails
$to_de = $_GET[keyemail];

echo "keyemail again is $to_de<br /><br />";

$email_key3 = decrypt($to_de, $key);

echo $email_key3;

То, что возвращается, когда я эхо, $email_key3 как-то кодируется - это должен быть me@me.com

Я, наверное, упускаю что-то очевидное, но это потеряло меня!

2 ответа

Вы не можете создать новый IV на каждой странице - вы должны либо сохранить IV от шага шифрования в файле или базе данных - или добавить его к зашифрованной строке. Создание нового IV на следующей странице не позволит вам расшифровать строку.

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

Я заметил, что метод шифрования, который вы используете, это добавление случайной соли. Это означает, что шифрование одной и той же строки одним и тем же ключом не приводит к одинаковому выводу. Попробуйте использовать нерандомизированный KDF. Попробуйте ответить в этой теме: /questions/20292457/luchshij-sposob-ispolzovat-php-dlya-shifrovaniya-i-deshifrovaniya-parolej/20292466#20292466

Другие вопросы по тегам