在url编码/url解码之前使用加密是否安全。加密的 GET url 没有 return 相同的值,偶尔用空格替换所有 +
Is it safe to use encryption before urlencode /urldecode. encrypted GET url does not return same value, replacing all + with spaces occasionally
您好,我正在使用加密函数来加密我的 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 ) ) ), "[=12=]");
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);
同时使用 encryption/decryption 和 URlencode / urldecode 安全吗?或者我在某处做错了。
不要在接收器中调用 urldecode()
。 PHP 在将它们放入 $_GET
之前自动解码所有 URL 参数。所以你解码了两次;自动解码将 %2B
转换为 +
,然后您对 urldecode()
的调用将 +
转换为 space。
您好,我正在使用加密函数来加密我的 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 ) ) ), "[=12=]");
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);
同时使用 encryption/decryption 和 URlencode / urldecode 安全吗?或者我在某处做错了。
不要在接收器中调用 urldecode()
。 PHP 在将它们放入 $_GET
之前自动解码所有 URL 参数。所以你解码了两次;自动解码将 %2B
转换为 +
,然后您对 urldecode()
的调用将 +
转换为 space。