Расшифровка 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