加密/解密,传递变量值

时间:2011-06-25 16:45:09

标签: php

我正在加密我通过超链接发送的变量值,以至于用户无法轻易编辑它。假设我有超链接中显示的值列表。

<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 个答案:

答案 0 :(得分:3)

您似乎对加密完整性评估感到困惑。

诚信评估
如果在用户修改了URL上传递的值时检测到您的目的,则哈希代码(有时称为消息摘要校验和 ),例如一个带有SHA256的产品就足够了 只需使用哈希码向URL添加额外的参数值即可。这个哈希码值可以通过向哈希算法提供您希望断言的完整性的值来产生,也可以沿着额外的秘密“密钥”值(也称为“盐”)来产生。收到请求后,首先验证URL上的值产生的哈希是否与URL的哈希匹配;如果它没有改变URL上的至少一个值。

<强>加密
如果您的目的是隐藏来自用户和其他人在URL上传递哪种数据/值,则必须进行加密。与散列不同,加密算法可以反转并从加密文本中生成原始输入 在大多数情况下,加密还可以提供数据完整性验证,因为某人很难以可以解密为结构有效文本的方式更改加密文本。许多加密算法甚至只改变加密文本中的一个或两个字节,导致在解密时产生“乱码”。

使用PHP

实用建议

  • 用于散列,请使用以下其中一项:crc32()md5()等。 (或hash(),如问题的代码段所示。)
  • 进行加密,请使用MCrypt module
  • 中的mcrypt_encrypt()/ mcrypt_decrypt()
  • 根据所使用的算法,记得转换加密输出base64或其他格式,以便它可以成为URL的一部分(许多散列和加密方法产生的二进制数据包含许多易受“破坏”网址的字符)

答案 1 :(得分:0)

如果您不需要更多秘密加密,请尝试使用base64_encode / base64_decode

答案 2 :(得分:0)

如果您只需要数据进行防篡改,则可以使用hash_hmac