正如问题所述,我需要一种方法来加密字符串(即'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中这样做。
这是一种游戏。用户不应该弄乱变量,因为他们会看到他们不应该看到的东西。
答案 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
等),那么您需要应用更多技术来解析该字符串。
答案 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代码仅作为示例。
答案 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']];