您好我正在使用加密函数来加密我的URI,然后再获取urlencoded并在我在接收页面中进行urldecoded之后最终将其解密。它的工作正常,但偶尔urldecode用空格替换所有+因此使我的解密函数失败。
以下是我的加密和解密功能:
function encryptIt( $q ) {
$cryptKey = 'aJB0rGtIn5UB1xG40efydp';
$qEncoded = base64_encode( mcrypt_encrypt( MCRYPT_RIJNDAEL_256, md5( $cryptKey ), $q, MCRYPT_MODE_CBC, md5( md5( $cryptKey ) ) ) );
return( $qEncoded );
}
function decryptIt( $q ) {
$cryptKey = 'aJB0rGtIn5UB1xG40efydp';
$qDecoded = rtrim( mcrypt_decrypt( MCRYPT_RIJNDAEL_256, md5( $cryptKey ), base64_decode( $q ), MCRYPT_MODE_CBC, md5( md5( $cryptKey ) ) ), "\0");
return( $qDecoded );
}
以下是我准备GET Url的方法:
$encrypted_id = encryptIt( $id );
$uri=urlencode($encrypted_id);
$uri="http://example.com/xyz.php?id=".$uri;
然后是我的接收脚本:
$id=urldecode($_GET['id']);
$id=decryptIt($id);
同时使用加密/解密和URlencode / urldecode是否安全?或者我在某处做错了。
答案 0 :(得分:4)
不要在接收器中呼叫urldecode()
。 PHP在将它们放入$_GET
之前自动解码所有URL参数。所以你要解码两次;自动解码会将%2B
翻译为+
,然后您对urldecode()
的调用会将+
翻译为空格。