【问题标题】:PHP Fetching encrypted value from addressbar not correctPHP从地址栏中获取加密值不正确
【发布时间】:2015-04-29 15:14:52
【问题描述】:

您好,我有一个邮件程序,其中包含指向我网站的链接,该链接是加密数据,如果我的加密数据带有“+”号,则主要问题是获取部分,它不包含在获取的数据中有关数据的示例,请参见此处:

index.php?s=NER4gXPSuaads+Cmb8LANA==

这是带有 + 号的链接 但从我的 Firebase 控制台 如您所见,“+”号不再存在,而是变成了一个空白。 我已经阅读了一些关于 php 的 urldecode 的文章,它说所有加号('+')都被解码为空格字符。所以我在想它可能与此有关.. 有解决方案吗?

这是我尝试获取它以供您参考的方法

    if($_GET['s']!='success') {
   $ref =htmlspecialchars($_GET['s']);
} else {
   $ref = "direct";
}

还有附加信息加密是在 AES.. 提前致谢

【问题讨论】:

  • base64_encode 输出(在您的视图中),base64_decode 输入(您的控制器)。
  • 在将字符串转储到 URL 之前使用 urlencode()
  • @cerebriform 我使用了你关于使用 base64_encode 和 decode 的想法,这正是我想要的,虽然我不确定我是如何做到的。但仍然感谢信息

标签: php url encryption


【解决方案1】:

要正确设置和获取“s”,您需要在设置 URL 时对其进行 urlencode(),并在获取时使用 urldecode()。

在我看来,“s”在 URL 上设置时可能没有经过 URL 编码。

【讨论】:

    【解决方案2】:

    好的,感谢@cerebriform 的评论,我已经找到了我想要的东西

    这是我的做法

    $refenc = base64_encode($refence);
    

    $refence 是 AES 加密的结果,因此在将其作为邮件发送之前它被再次编码,但这次使用 base64_encode()。那么它的外观如何,我会告诉你$final = base64_encode($rdfence);。然后,它将被发送到我的邮寄者希望将其发送到的电子邮件中。我的网站如何设法消除我的问题是从我使用的网址中检索链接base64_decode() ...然后在它被解码后另一个解码器将发生 AES 解密脚本现在将对其进行解密以从数据库中获取原始数据

    这是最终代码:

      if($_GET['s']!='success') {
     $d = base64_decode($_GET['s']);
     $aes->setData($d);
     $ref=$aes->decrypt();
    
    } else {
       $ref = "No Id";
    }
    

    感谢各位大佬的指点

    【讨论】:

    • 差不多。 Base 64 仍然允许 + 出现,但它以可预测的频率出现。要对您的应用程序进行防弹,请关注advice in this answer
    猜你喜欢
    • 1970-01-01
    • 2015-05-15
    • 2018-10-29
    • 2020-09-18
    • 1970-01-01
    • 2012-12-13
    • 2018-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多