我正在使用以下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=
然后它没有使用相同的密钥以原始形式解密它,我得到一些垃圾数据。
我认为它类似于网址编码/解码问题?
有什么方法可以解决这个问题吗?
由于
答案 0 :(得分:6)
+
表示空格。如果您想在URL中传递任意数据,尤其是可能包含特殊字符,urlencode
的数据,请先将其放入网址。
答案 1 :(得分:1)
你的猜测是正确的:
你应该在将pass参数附加到查询字符串之前对其进行urlencode。
urlencode($encrypted_password);
然后解密之前的urldecode
urldecode($encrypted_password);
快乐的编码!