传入URL后密码解密不起作用

时间:2012-07-12 14:17:01

标签: php passwords md5 encryption

我正在使用以下technique来加密/解密密码:

$key = 'abcd';
$password = 'password';

$encrypted_password = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $password, MCRYPT_MODE_CBC, md5(md5($key))));

$decrypted_password = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode($encrypted_password), MCRYPT_MODE_CBC, md5(md5($key))), "\0");

Above code is working for me on same page

但是当我将此加密密码在URL中传递给另一个网页时,如:

example.com/authenticate.php?pass=CuESFcvXHnQkZaY79WUL3U2aY9TROkjZFETk9Ur+iFY=

然后它没有使用相同的密钥以原始形式解密它,我得到一些垃圾数据。

我认为它类似于网址编码/解码问题?

有什么方法可以解决这个问题吗?

由于

2 个答案:

答案 0 :(得分:6)

URL中的

+表示空格。如果您想在URL中传递任意数据,尤其是可能包含特殊字符urlencode的数据,请先将其放入网址。

答案 1 :(得分:1)

你的猜测是正确的:

你应该在将pass参数附加到查询字符串之前对其进行urlencode。

urlencode($encrypted_password);

然后解密之前的urldecode

urldecode($encrypted_password);

快乐的编码!