传递表格数据加密,但在URL中可见

时间:2014-03-13 21:34:43

标签: php forms encryption getmethod

所以我已经管理了如何解码和编码,这是通过2个函数完成的。 所以这是示例

http://goldextra.com/b/id_color.php

如果输入一个单词,它将被编码,如结果页面所示。 所以如果输入= testword 该网址将为 http://goldextra.com/b/balloony.php?name=testword

事情是,我希望网址看起来像这样 的 http://goldextra.com/b/balloony.php?name=k484z52646w5i474 (当然,网站本身不应该显示加密,而是单词)

如何更改现有代码,是否必须更改表单站点或结果站点中的代码?

表格代码

 <form action="balloony.php" class="sign-up" method="get" class="sign-up">
<h1 class="sign-up-title">Whats the word?</h1>
<input type="text" class="sign-up-input" placeholder="Enter your baloony" name="name" autofocus>
<input type="submit" value="baloony it!" class="sign-up-button">

结果网站

<?php
function encode($string,$key) {
$key = sha1($key);
$strLen = strlen($string);
$keyLen = strlen($key);
for ($i = 0; $i < $strLen; $i++) {
    $ordStr = ord(substr($string,$i,1));
    if ($j == $keyLen) { $j = 0; }
    $ordKey = ord(substr($key,$j,1));
    $j++;
    $hash .= strrev(base_convert(dechex($ordStr + $ordKey),16,36));
}
return $hash;
}

function decode($string,$key) {
$key = sha1($key);
$strLen = strlen($string);
$keyLen = strlen($key);
for ($i = 0; $i < $strLen; $i+=2) {
    $ordStr = hexdec(base_convert(strrev(substr($string,$i,2)),36,16));
    if ($j == $keyLen) { $j = 0; }
    $ordKey = ord(substr($key,$j,1));
    $j++;
    $hash .= chr($ordStr - $ordKey);
}
return $hash;
}
?>

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title><? echo htmlspecialchars($_GET["name"]) . '!'; ?></title>
<style type="text/css">
.BIG {
    font-size: 250px;
font-weight: bold;
font-family: "Palatino Linotype", "Book Antiqua", Palatino, serif;
text-align: center;
}
</style>
</head>
<body class="BIG">


<?php
$name = htmlspecialchars($_GET['name']); 
$urlENC = encode( $name ,"whateverkey"); 
$urlDEC = decode( $urlENC ,"whateverkey"); 
echo htmlspecialchars($_GET["url"]) . '';
echo $urlENC; ?>
<br />
<? echo $urlDEC; ?>

1 个答案:

答案 0 :(得分:1)

所以是的,你需要使用javascript来完成它,但是你不能使用SHA,因为它会生成一个哈希值,你将无法在服务器端恢复数据。 对于我的例子,我将使用十六进制,这不是非常安全(解码非常简单):

Javascript功能:

function stringToHex (tmp) {
    var str = '';
    var tmp_len = tmp.length;
    var c = 0;
    for (var i=0; i < tmp_len; i++) {
        c = tmp.charCodeAt(i);
        str += c.toString(16);
    }
    return str;
}

在发布之前在参数上使用此功能。

现在,PHP方面:

function hexToStr($hex){
    $string='';
    for ($i=0; $i < strlen($hex)-1; $i+=2){
        $string .= chr(hexdec($hex[$i].$hex[$i+1]));
    }
    return $string;
}

你去。