【问题标题】:Append JSON object to encrypted text file PHP将 JSON 对象附加到加密文本文件 PHP
【发布时间】:2019-04-29 18:12:32
【问题描述】:

我通常从 JavaScript 传输 JSON 对象并使用 PHP 保存它们。

然后我将它们附加到一个特定的文本文件中,如下所示:

        $theFile = fopen("Data/" . FQ . ".txt", "a+");
        fwrite($theFile, $data.PHP_EOL);
        fclose($theFile);

我可以添加代码来将此信息保存为加密文本文件吗?

理想情况下,我想要:

  • 我服务器上所有要加密的文件
  • 存储在我的本地计算机上的密钥

要破译,我会:

  • 将数据从服务器传输到本地计算机
  • 使用我的本地密钥解密

我希望这样,如果我的服务器被入侵,所有数据都是乱码,没有密钥(它存储在服务器上的任何地方)。

【问题讨论】:

  • 是的,您可以添加代码来执行此操作。但是是/否问题并没有那么有用。如果您的问题是如何 这样做,那么您的问题对于 StackOverflow 来说太宽泛了。我建议您先尝试自己解决问题,然后编辑您的问题以包含更具体的问题。
  • 您可以推荐哪些资源以便我更具体?我听说过 AES 和 SHA 之类的东西,但我不知道从哪里开始。
  • AES 是一种加密算法,适合这种情况。 SHA 系列算法是散列算法,与加密没有任何关系。我将首先查看 PHP 中的 openssl_encrypt 函数,然后查看 this repository 中的代码示例。
  • 所以我认为我遵循如何加密信息的一般想法,但看起来他们正在存储密钥以解密加密内容中的内容。我想避免这种情况,并且永远不要在任何地方解密我服务器上的内容。我希望它被加密,而我的服务器上没有任何密钥的痕迹;这有意义吗?
  • 你误会了 - 密钥作为参数传递给函数。它不会以任何方式与数据一起存储。这将完全破坏加密的意义。

标签: javascript php json encryption


【解决方案1】:

您将需要一种对称加密算法,例如 AES。事实证明,作为 Forge 的一部分,它有一个不错的 JavaScript 实现。

https://github.com/digitalbazaar/forge#aes

您需要使用 CBC 模式来加密有效负载并将其发送到您的服务器。

如果您一心想将其保存在文本文件中,则必须对此二进制数据进行 base64 编码。 在服务器端执行此操作。您的客户端代码不需要知道或关心您的服务器实际存储数据的方式。此外,您还可以节省 33% 的带宽和一些客户端 CPU。

作为 base64 编码的一个好处,您可以在文本文件中对记录进行行分隔。

当您将数据返回给您的客户端时,您应该对 base64 进行解码并将二进制加密数据发送给他们。然后客户端将使用只有它知道的密钥对其进行解密。

【讨论】:

  • 非常有趣的回复,有没有办法将它保存到我的个人资料中,以便我以后可以快速访问它?
  • @Mr-Programs 问题旁边有一个星形图标。您可以通过这种方式将其标记为收藏。
  • 我认为这个问题是一般低,我只喜欢你的回复,但我不喜欢
  • @Mr-Programs 谁告诉你这是错误的,如果你阅读了你链接的答案,你就会明白为什么。 GET 请求的问题是日志记录。 GET 本身并没有天生不安全的地方。您可能有兴趣知道许多服务器配置也记录 POST 请求正文。 POST 在某种程度上更安全​​是一个完全的神话,你应该停止延续这个神话。如果没有适当的传输加密 (HTTPS),或者两端的数据处理不善(不安全的日志记录等),两者本质上都是不安全的。
  • @Mr-Programs 这是一个 API,URL 不会出现在历史记录中。至于跨域 GET 请求,我建议您阅读 CORS 的工作原理,以便您了解防止跨域请求是多么微不足道……如果您甚至需要/想要这样做。 (请记住,没有飞行前请求并不意味着您没有受到保护!)大多数 API 的构建方式不依赖于 cookie 数据或其他有状态数据。因此,其他域上的客户端应用程序无论如何都不会被神奇地授权。
猜你喜欢
  • 2018-05-21
  • 1970-01-01
  • 2020-04-12
  • 1970-01-01
  • 2016-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-23
相关资源
最近更新 更多