2011-06-25 25 views
0

我正在加密通过超链接发送的变量值,以至于用户不容易编辑变量。假设我有超链接中显示的值列表。加密/解密,传递变量值

<a href="p_view.php?title=<?= hash('sha512', time() + $row['p_id'])]?>"><?=$row['p_name'] ?></a> 

现在我想转到view.php,我想从题目回来的$row['p_id']值。他们有什么办法呢?有什么其他功能在manage.php上加密并再次解密view.php页面?

+3

SHA256是散列算法和_not_加密。它不可能再次“解密”。 – KingCrunch

回答

3

你似乎是混乱加密完整性评估

完整性评估
如果你的目的是检测当用户修改的URL传递的值,一个散列码(有时被称为一个消息摘要校验),例如因为用SHA256产品就足够了。
只需在URL中添加一个额外的参数值和一个哈希码。这个哈希码值可以通过向哈希算法提供您希望声明的完整值(可能沿着额外的秘密“关键”值(又名“盐”))来生成。在收到请求后,首先验证由URL上的值产生的哈希值与URL的哈希值相匹配;如果它在URL上至少没有一个值被改变。

加密
如果你的目的是隐藏从用户和其他人什么样的数据/值对URL传递,加密是必要的。与散列不同,加密算法可以颠倒并从加密文本中产生原始输入。
在大多数情况下,加密还可以提供数据完整性验证,因为某人难以通过可以将其解密为结构上有效的文本的方式来更改加密文本。许多加密算法都会改变加密文本中的一个或两个字节,导致在解密时产生“乱码”。

切实可行的建议用PHP:

  • 的散列,使用一个:crc32()md5()等。 (或者如问题代码片段中所示的hash())。
  • 用于从MCrypt module
  • 取决于所使用的算法加密,使用mcrypt_encrypt()/ mcrypt_decrypt(),记得加密输出的base64或其它格式转换,使得它可以是一个URL的一部分(多散列和加密方法产生,其中包括敏感的“破”的网址人​​物众多二进制数据)
+0

谢谢。因为我对所有这些方法以及功能都很陌生。我研究了每个功能,并发现它们非常安全。这些可能是最好的密码保护... 关于我的问题..我需要加密3-4位数的变量。我使用'base64_encrypt',但它不适合URL的观点。由于通过这个加密在URL中给出了=,我不认为这会更好。 建议我功能,以便我的加密值将以字母数字形式变为10-15。不只是这个。那是特殊的性格。 在此先感谢。 – Aditii

+0

好吧,对于按字母顺序排列的值,它们会以所需的长度进行加密,但它会在某些加密值中给出'='..请理清这个问题。 – Aditii

0

,如果你并不需要更多的秘密加密,请尝试使用BASE64_ENCODE/BASE64_DECODE

0

如果你只需要数据防窜改您可以使用hash_hmac