【问题标题】:How to encrypt data in C++ and decrypt them back in PHP?如何在 C++ 中加密数据并在 PHP 中解密它们?
【发布时间】:2016-05-28 23:12:32
【问题描述】:

希望问题不是很离谱。我刚刚开始加密和编写在传输数据时更安全的代码。我们在 Arduino 上实现 C++,我们使用 wifi 模块通过 HTTP 将数据传输到用 PHP 编写的 webServer。由于我们需要保持客户端非常轻便,我们认为我们使用加密而不是 TCP 堆栈或 HTTPS,以使我们的数据传输更安全一点。我们查找了一些有用的 Arduino 加密库,它们主要是用 C++ 编写的。所以我们想知道如何使用相同的算法但在 PHP 中解密数据?我们应该用 PHP 重写该算法还是有更好的方法?有没有现成的解决方案?这是要走的路吗?

【问题讨论】:

  • 使用 https。我相信 arduino 的客户端 https 库将更加可靠,并且比您自己拼凑的任何东西都要好得多。因为如果您确实具备自行实施可靠加密解决方案的技术技能,我认为您不会在 stackoverflow.com 上向完全陌生的人寻求帮助
  • 没必要在那里混蛋,努力提高我的技术技能。而stackoverflow实际上就是为了这个确切的目的而制作的。如果我使用 https,我不需要服务器端的证书吗?
  • @SamanRajaee 如果您控制每个客户端(例如:Arduino 设备),您可以使用自己的 CA,或者只需将自签名证书添加到设备的信任链中。
  • @SamanRajaee 当然,你可以create the certificates yourself,或者如果你想得到一个合适的,你可以从Let's Encrypt购买或免费获得一个
  • 如果你想要加密并且不能使用 https,那么使用 AES。

标签: php c++ security encryption arduino


【解决方案1】:

所以我们想知道如何使用相同的算法但在 PHP 中解密数据?

假设您已经定义了一个加密方案,PHP 有 Mcrypt functions Defuse 支持对称芯片,OpenSSL functions 支持非对称芯片和 Hash functions
因此,您只需像使用任何其他语言一样编写解密算法。

非常感谢 zaph 指出 Mcrypt 已过时。

我们应该用 PHP 重写那个算法还是有更好的方法?

由于 PHP 是一种非常简单(但很微妙!)的语言,因此重写通常是最快的方法。
您可以通过编写 PHP extension 来完全重用 C++ 代码。

请注意,我假设您要编写加密方案,而不是加密原语。
重写分组密码、散列函数或流密码通常是一个坏主意,重写您已经在 C++ 中实现的自定义方案(见最后一点)是另一回事。

有没有现成的解决方案?

HTTPS,更具体地说是TLS

这是要走的路吗?

滚动您自己的加密货币?没有。

HTTPS 为您提供了更多的机密性(不让知道您发送的内容),它为您提供sACCE(仅服务器验证和机密通道建立)。
例如,如果您不采取适当的对策,攻击者可以回复他们看到的所有请求;一个天真的block cipher mode 让方案很容易distinguishable

如果您的团队对这些术语没有信心并且没有经验丰富的程序员和数学家,我建议使用 HTTPS。
这并不像您想象的那样昂贵(它使用流密码,昂贵的部分是握手,并且今天的每个服务器都支持 Connection: Keep-Alive)。


您可能会认为自己在不需要强加密的环境中工作,我说根本不需要加密,为自己节省大量调试。

不存在部分加密这样的东西:要么你做对了,要么你根本不做。

【讨论】:

  • 最好不要使用mcrypt,它是废弃软件,多年未更新,不支持标准PKCS#7(née PKCS#5)填充,只有非标准空填充可以'甚至不能与二进制数据一起使用。 mcrypt 有许多出色的 bugs 可以追溯到 2003 年。请考虑使用 defuse,它正在维护并且是正确的。
  • 非常感谢大家!这将有很大帮助,将查看所有这些并尝试了解将要走的路。为了确保不会推出我们自己的加密,我们将使用标准和经过认证的库,但只需要找到一种方法让它们一起工作。
  • @Margaret Bloom 您可能想澄清您对“我们是否应该重写该算法”的回答的意思。您是否建议在 PHP 中重新编写对称密码(例如 AES),听起来这可能是一个非常糟糕的解释。
  • @SamanRajaee 使用 AES,有用于 C++ 的库,您可以使用 defuse 用于 PHP。但是安全地使用加密也有一些微妙之处。
  • @zaph 感谢您指出Defus。关于重写算法,我说的是加密方案,而不是加密原语。我会澄清的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-10
  • 1970-01-01
  • 1970-01-01
  • 2016-12-25
  • 2018-04-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多