2014-02-19 53 views
-1

我正在处理一个应用程序,而我被卡在这里。删除这些额外的字符

我正在做一个产品删除页面,其中的id在URL中传递,以便我可以搜索数据库并选择特定的记录。 由于传递身份证不是一个好主意,所以我在散列中加密ID然后传递。但是由于散列之间有一些空格,所以当我尝试在我的应用程序中使用它时。在散列中添加了外部空格字符以填充空格。

这是我的加密功能: -

function getHash($recordid) 
{ 
    global $db; 
    $key_value="[email protected]@"; 
    $plain_text=$recordid; 
    $encrypted_text = mcrypt_ecb(MCRYPT_DES, $key_value, $plain_text, MCRYPT_ENCRYPT); 
    return $encrypted_text; 
} 

这里就是我得到输出$ plain_text = 1时,我不会在URL通过,并简单地打印出来。

ÑÛo‡Ó‰-7 

但是,如果我通过URL传递给它,它就会被转换成这样: -

%D1%DBo%87%D3%89-7 

所以肯定当我将其解密,我不会得到正确的结果。 解密后有没有什么方法可以得到原始值(本例中为1),还是我完全可以使用不同的解密,加密函数,以便我摆脱这个问题?

谢谢。

+0

对不起,但不应该为此操作需要授权?默默无闻的安全性很少是一种好方法。 – raina77ow

+0

这肯定需要授权。 用户需要登录,我有一个功能,检查具有特定ID的产品是否映射到用户的帐户。 但我也想通过解密id来添加另一个安全层。 – Ankur

+0

您可以使用urlencode($ encrypted_text),以便转换为可转发编码而不会破坏实际值,然后使用urldecode($ encrypted_text)在页面上获取您的散列:) [测试此处](http://meyerweb.com)/eric/tools/dencoder /) –

回答

0

因为这些都是8位字符,所以当它们被编码时,它们被转换成它们的%XX十六进制表示。当Web服务器位于URL的Query部分时,它会为您做相反的处理,所以您应该没问题。尽管如此,在制作URL之前对加密字符串进行64位编码并将其64位解码比较安全,因此您只需要处理ASCII字符即可。

+0

你能举个例子吗?或者任何链接? – Ankur

+0

参见http://php.net/manual/en/function.base64-encode.php和http://php.net/manual/en/function.base64-decode.php。 base64_encode的结果总是一个“漂亮的”ascii字符串。 –