Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 提供加密数据和解密数据的方法是否不安全?_Php_Public Key Encryption - Fatal编程技术网

Php 提供加密数据和解密数据的方法是否不安全?

Php 提供加密数据和解密数据的方法是否不安全?,php,public-key-encryption,Php,Public Key Encryption,我正在开发一个附加到我拥有的系统中,它将允许我的客户网站从中提取数据并显示在他们的网站上 现在,大多数情况下,存储在系统中的信息在任何方面都是不敏感的(因为它刚刚发布到他们的网站上),但是一些用户为了方便而设置了他们想要在系统中管理的表,但是没有发布到他们的网站上——尽管他们可能想对其提出请求(也就是说,检查客户是否登录了他们的网站,或者获取了一个电子邮件地址)。因此,我需要对回复进行加密,以减少有人获得不应该拥有的数据的机会 我的计划是,用户将使用用户ID、公钥和他们想要运行的查询的名称(他们

我正在开发一个附加到我拥有的系统中,它将允许我的客户网站从中提取数据并显示在他们的网站上

现在,大多数情况下,存储在系统中的信息在任何方面都是不敏感的(因为它刚刚发布到他们的网站上),但是一些用户为了方便而设置了他们想要在系统中管理的表,但是没有发布到他们的网站上——尽管他们可能想对其提出请求(也就是说,检查客户是否登录了他们的网站,或者获取了一个电子邮件地址)。因此,我需要对回复进行加密,以减少有人获得不应该拥有的数据的机会

我的计划是,用户将使用用户ID、公钥和他们想要运行的查询的名称(他们将在系统本身中预先定义)来标识自己,并且请求将采用如下形式:

require("backend-api.php");

$myUserID = "bobs-restaurant.com";
$myPublicKey = "sdg136MAGHYasfadgHGQ"; //send this with the request
$myPrivateKey = "adgljavd8i1356avdilj"; //never send this anywhere
$queryName = "LIST_OF_DISHES";

$backend = new backend-api();
$response = $backend->getData($myUserID,$myPublicKey,$queryName);

$list_of_dishes = $backend->decrypt($response,$myPrivateKey);

//user then goes on to use the data in their code or maybe just display it as-is.
它必须很简单,因为用户要么不是经验丰富的PHP程序员,要么是时间不够用的人,他们使用系统来管理内容,而不必编写自己的内容管理解决方案

假设上面的用户ID和公钥是匹配的,并且查询存在并返回数据-我将让我的系统加密对用户已知的私钥的响应($myPrivateKey)这对我的系统来说是已知的,但在一个请求中,这两个请求之间从未交换过,所以它不能被截获,我打算用类似的方法来做加密

问题是,我必须为用户提供解密类,以便他们能够从响应中获取数据

因此,如果恶意先生以某种方式获得了属于其他人的用户ID和公钥,并且他从我的系统网站上的教程/用户手册中下载了解密类的副本,那么我说他不需要知道私钥是对的,因为他可以通过研究代码来解决如何解密


如果答案是肯定的,有什么是我没有想到的,可以阻止这种情况发生的?

恶意先生不知道如何从简单的代码研究中解密任何东西。他能做的最好的事情就是强行使用“私钥”

我用引号括起来,因为这实际上不是公钥加密或密码学。只有当服务器使用客户端的公钥加密数据,然后客户端使用其私钥解密数据时,这才是公钥加密。如果是这样,服务器根本不需要知道私钥。但是听起来你在用公钥做完全不同的事情

您在这里讨论的似乎是对称密钥加密(使用相同的密钥加密和解密数据)


如果您使用强加密/解密方法,您的方法看起来很好,但我会使用现有的算法,如Blowfish或AES。

一个好的加密方法决不会依赖于不知道它是如何工作的人来确保其安全性。事实上,如果您要使用加密,您决不会想要尝试自己的算法。如果不能用来加密东西的方法很简单,比如说,那么是的,知道这个方法会让攻击者很容易地解密它

然而,像这样的加密方法在全世界广为人知、出版和使用。每个人都知道它是如何工作的,但如果不知道用于加密和解密的密钥,就很难破解

您面临的最大问题是,您链接的加密类和AES都是对称或预共享密钥加密方法。这意味着您必须使用相同的密钥来加密和解密数据。这不符合您的目的,因为您和您的用户不知道相同的密钥。如果您有办法知道相同的密钥,退房


否则,请使用非对称密钥加密。这可以使用您描述的方法工作,其中可以使用任何人都知道的公钥对某些内容进行加密,但只能由使用私钥的人解密。最简单的版本是GPG,可以在PHP中使用它,尽管可能需要更多的设置工作。请参阅关于你使用ssl连接而不是自己加密数据?@Erik我可以在我这边使用ssl,但我无法控制用户端,我怀疑他们会。在我上面描述的内容中,用户和服务器都知道相同的密钥(可以在用户激活服务并向他们显示时生成),我只是使用一个不同的方法将用户标识到服务器,这样就不需要在两者之间发送解密密钥,并且有被泄露的风险。我的理想解决方案是广泛可用的东西,所以我将查看您链接的内容-我将使用PHP My end并可以添加扩展,但用户可能会使用标准没有这种控制的共享主机,也许有些人甚至会使用其他语言进行连接……但当然,仍然需要某种密钥,这样它只能由预期的收件人解密。啊,谢谢,这是有道理的。我确实浏览了现有的方法,但可能不够仔细,我得到了这样的印象或者只是单向散列。我真的不想在这里重新发明轮子,所以如果有一个好的内置解决方案,那就是我想要使用的!