【问题标题】:Encrypting data in php and decryption in javascript在php中加密数据并在javascript中解密
【发布时间】:2016-09-20 10:31:01
【问题描述】:

我正在使用 2 台服务器。

我想创建一对密钥并将私钥存储在本地存储中,并将公钥发送到 PHP 服务器。

在 PHP 中使用公钥加密数据,在 JavaScript 中解密数据

任何建议..我该怎么办。

我已经尝试了一些东西,但结果不像(公钥)[http://phpseclib.sourceforge.net/rsa/examples.html#convert] 和(私钥)[https://github.com/travist/jsencrypt]

谢谢。

更新:

目标:目标是安全地将数据从 PHP 服务器发送到客户端。

更新编辑:

将私钥保存在 php 代码中并在调用时将公钥提供给客户端(javascript 服务器 node.js)有多安全......就像从 node.js 服务器发送数据到 php 服务器......是没有 https 就这么安全??

或者如果我们使用https,那么我们就不需要使用这个方法......??

谢谢

【问题讨论】:

  • 在浏览器 localStorage 中存储私钥听起来有点不合常规。如果您无论如何都在控制服务器,那么为什么不使用客户端证书验证,因为服务器实际上会依赖 SSL 层来验证连接的客户端是否有适当的证书来访问内容?
  • Questios 已更新 @VladimirM
  • 一般来说,你有2个参与者:网络中的服务器和用户机器上的浏览器。如果您在通话时发送密钥,则意味着任何在您的网络上监听 HTTP 流量的人都会看到您的密钥)
  • 但这很好..如果有人听我的钥匙,因为那是公钥....听公钥有什么问题...
  • 我会将公钥从服务器发送到浏览器,浏览器将使用该公钥加密数据并将其发送回服务器....服务器将使用存储在 php 中的私钥解密数据...这不安全吗??

标签: javascript php node.js rsa public-key-encryption


【解决方案1】:

如果您的目标是安全地将数据从 php 服务器发送到客户端,请考虑使用 HTTPS。

相反,您要尝试做的事情很难做到正确。如果您不使用 HTTPS,那么这将毫无意义,因为您的访问者将无法知道他们在与谁交谈以及密钥生成和解密代码是否值得信赖。如果您使用的是 HTTPS,那么您已经安全地将数据从 php 服务器发送到客户端(使用私钥和公钥)并且再次对其进行加密不会做任何事情。

如果您试图保护该秘密免受浏览器中运行的其他 JavaScript 代码的影响,它仍然不会做任何事情,因为在您的浏览器中拥有私钥、加密算法和加密消息并不比拥有明文更安全。

此外,在密钥生成、密钥分配、加密算法、处理加密消息等方面存在很大的细微错误。即使你能正确地完成所有这些,你得到的最多也就是你所得到的已经有 HTTPS。

而且不要认为这很容易 - 具有良好意图和经验丰富的开发人员的 OpenSSL 可能是 the number of CVE entries 的世界纪录保持者,因为这东西很难做好。

请务必阅读这篇经典文章:

也值得一读:

【讨论】:

  • 感谢您的回答..这是我迄今为止听到的最好的........
  • 我还有一个问题要问你....将私钥保存在 php 代码中并在调用时将公钥提供给客户端(javascript 服务器 node.js)有多安全...比如用于将数据从 node.js 服务器发送到 php 服务器....没有 https 是否安全 .... ???
  • @ManpreetOberoi 如果没有 https,则始终存在密钥在传输过程中可能被更改的风险,或者客户端不确定它是否正在与受信任的服务器通信。如果您自己做所有事情,就很难确保一切都正确。但是你可以使用 https(带有来自letsencrypt.org 的免费证书),你可以使用 ssh,你可以使用encryption in ZeroMQ,你可以使用encryption in RabbitMQ,你可以通过 https 使用加密的 websocket - 你可以使用一些解决方案或许可以在这里使用。
猜你喜欢
  • 1970-01-01
  • 2017-05-04
  • 1970-01-01
  • 2013-02-12
  • 2012-06-10
  • 1970-01-01
  • 1970-01-01
  • 2019-02-13
  • 2016-02-03
相关资源
最近更新 更多