0

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

$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");

上面的代码在同一页面上为我工作

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

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

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

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

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

谢谢

4

2 回答 2

6

+在 URL 中代表一个空格。如果要在 URL 中传递任意数据,尤其是可能包含特殊字符的数据,请urlencode在将其放入 URL 之前。

于 2012-07-12T14:20:34.023 回答
1

你的猜测是对的:

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

urlencode($encrypted_password);

然后在解密之前进行urldecode

urldecode($encrypted_password);

快乐编码!

于 2012-07-12T14:25:01.493 回答