什么是加密字符串并通过php中的URL传递的简单对称方式?

时间:2013-12-17 01:40:28

标签: php url encryption obfuscation encryption-symmetric

正如问题所述,我需要一种方法来加密字符串(即'x = 27& y = 3& z = 123456'到'hUIgBG5664y65H2UIB'),以便它可以通过html图像源传递,就像这样:

<img src="returnpicture.php?stuff=hUIgBG5664y65H2UIB"/>

returnpicture.php会将其解密回“x = 27&amp; y = 3&amp; z = 123456”并将其解析为三个变量,用于挑选图像并将其返回。

问题是,无论我看到什么,我所能找到的只是散列和加密信用卡和密码等超敏感信息。这个信息根本不敏感,我只是不希望用户能够篡改它。因此,它不应该过长。此外,加密(我猜)必须是字母数字,以免弄乱网址和&amp;或=。我在php中这样做。

这是一种游戏。用户不应该弄乱变量,因为他们会看到他们不应该看到的东西。

3 个答案:

答案 0 :(得分:1)

一般理解

当您在请求网址中包含某些键值对时,PHP会将这些值(相应地)加载到$_GET超全局中。

?x=12&y=13

将导致

$_GET['x'] // contains 12
$_GET['y'] // contains 13

您似乎要做的是在键值对中提供多个键值对:

?stuff={more-key-value-pairs}

请注意,PHP不会解释$_GET['stuff']中的键值对。

<强>编码/解码

注意:这是许多可能的解决方案之一。找到最适合你的那个并应用它。

您可以使用base64_encode()对其进行编码,并使用base64_decode()对其进行解码。

示例:

echo '<img src="returnpicture.php?stuff=' . rawurlencode( base64_encode('x=27&y=3&z=123456') ) . '" />';  

使用rawurlencode()可确保对base64编码的字符串进行正确的url安全编码。

returnpicture.php 中,您可以使用:

$decodedString = base64_decode( $_GET['stuff'] );

取回原来的字符串。

但是,如果您实际上计划发送类似字符串的get-request(具有变量赋值,例如?x=12&y=13等),那么您需要应用更多技术来解析该字符串。

See this question for details on how it can be done

答案 1 :(得分:1)

您可以使用简单的密码,例如滚动的XOR哈希。这很容易实现,但如果唯一的好处是微不足道的事情,例如让服务器以非标准尺寸提供服务的能力,那么人们可能会因此而烦恼的麻烦。

function scramble(key, text) {
    return encodeURIComponent(text.replace(/[^\0]/g, function(x, i) {
        var code = x.charCodeAt(0) ^ key.charCodeAt(i % key.length);
        return String.fromCharCode(code);
    }));
}

function descramble(key, text) {
    return decodeURIComponent(text).replace(/[^\0]/g, function(x, i) {
        var code = x.charCodeAt(0) ^ key.charCodeAt(i % key.length);
        return String.fromCharCode(code);
    });
}

如果您的key是&#34;密码&#34;并且您的text是&#34; x = 27&amp; y = 3&amp; z = 123456&#34;,然后scramble(key, text)返回&#34;%0BXQEC%0D%5E%5CB%1FNTQAQAU&#34 ;

&#34;解扰&#34;使用相同key的结果会得到原始text,&#34; x = 27&amp; y = 3&amp; z = 123456&#34;。

请注意,您可能希望在PHP方面执行此操作,JavaScript代码仅作为示例。

http://jsfiddle.net/m92rc/

答案 2 :(得分:0)

我建议您可以使用$_SESSION vars在您的网页之间共享信息,但是,只有当两个页面位于同一个上下文服务器中时,它才有效。

方法1。 base64编码

<img src="returnpicture.php?stuff=<?php echo base64_encode('x=27&y=3&z=123456'); ?>"/>

得到这个:

$data = base64_decode($_GET['stuff']);

方法2。 $_SESSION变量

您应该将 $_GET $_POST 合并,而不会泄露合理的信息,例如:

$postfix = uniqid(); // Generate an UNIQUE id
$_SESSION['sensible_var1_'.$postfix] = "value";
$_SESSION['sensible_var2_'.$postfix] = "value";
$_SESSION['sensible_var3_'.$postfix] = "value";

您只能通过以下方式传递此信息:

<img src="returnpicture.php?stuff=<?php echo $postfix; ?>"/>

returnpicture.php 文件中,您可以按以下方式检索信息:

$sensible_var1 = $_SESSION['sensible_var1_'.$_GET['stuff']];
$sensible_var2 = $_SESSION['sensible_var2_'.$_GET['stuff']];
$sensible_var3 = $_SESSION['sensible_var3_'.$_GET['stuff']];