Я пытаюсь отправить зашифрованные данные по URL-адресу на другой сайт (используя file_get_contents("anotherUrl.php?hash=$encryptedString")
. Проблема в том, что иногда шифрование содержит некоторые специальные символы, такие как +, и это приводит к расшифровке терпеть неудачуPHP, отправляющий зашифрованные данные по URL-адресу
Вот мои методы шифрования/дешифрования:.
public function encrypt($string, $key)
{
return base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $string, MCRYPT_MODE_CBC, md5(md5($key))));
}
public function decrypt($encrypted, $key)
{
return rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode($encrypted), MCRYPT_MODE_CBC, md5(md5($key))), "\0");
}
Вот пример зашифрованная строка, которая содержит +
, и я предполагаю, что это приводит к тому, дешифрование сбой
. oWCrVPaS+5GbxcQFc0fulUk/zRAkDD60av4zlPiWskE=
Любые идеи, как я должен решить это? Я попытался сделать urlencode()
и urldecode()
на хэше, однако это также заставляет шифрование ломаться. Есть ли способ изменить алгоритм шифрования, чтобы заставить его возвращать только безопасные символы?
Вопрос, почему вы выполняете две последовательные операции md5 на ключе? Чего вы хотите добиться от этого? – initramfs
@CPUTerminator Фактически я скопировал функцию точно так же, как и из другого ответа здесь, на SO, я не внес никаких изменений в нее. –
Эх ... Я не вижу в этом никакого смысла. Если ключ слабый (т. Е. Не из криптографически сильного генератора случайных чисел), вы не должны ** использовать 'md5' в качестве алгоритма усиления ключей (см.' PBKDF # 2', 'bcrypt' или' scrypt') , Если ваш ключ уже силен, вы просто теряете процессорные циклы. – initramfs