【问题标题】:What encryption algorithm would be best for data transfer between Python and Php?哪种加密算法最适合 Python 和 Php 之间的数据传输?
【发布时间】:2011-01-19 14:14:03
【问题描述】:

我正在编写一个基于客户端/服务器的程序,服务器端使用 Php,客户端使用 Python,我需要确保双向传输数据是安全的。

所以,我的问题是

哪种加密算法最适合 Python 和 Php 之间的数据传输?

  • 我无法使用 Https
  • 需要在 Python 和 Php 上使用密钥解密/加密
  • 我不需要 shared 公钥,可以在 Python 和 Php 中设置密钥手动
  • 由于我自己不知道如何实现算法,所以两种语言的示例都会很棒。
  • 我的数据不像银行网站那样严重,只是想加密以防止网络被嗅探

我已尝试检查此问题,但找不到适合我的答案

Compatible encryption between C# and PHP, ColdFusion, Ruby, Python

提前致谢。

【问题讨论】:

  • 你可以使用 DES/DES3 或类似的东西吗?
  • 是的,任何合适的都可以,只是不知道该选择哪一个以及如何实施。 DES3 是否基于公钥/私钥?顺便说一句,我不需要宣传公钥。我以为我可以使用 AES,但我在标准 Python 包中看不到这些。
  • 针对要点 3 的小注:key could be set in both Python and Php manually。那一个共享密钥。出于好奇,为什么 SSL 是不可能的?
  • 关于 SSL,因为我没有支持 SSL 的主机。我的意思是,算法不必是基于公钥/私钥的,因为我想的是受密码保护的数据,我可以在代码中手动设置密码来进行加密/解密过程。

标签: php python algorithm security encryption


【解决方案1】:

Greg Hewgill 是正确的并且有最好的建议。我试图发明自己的代币系统,虽然有些成功,但它不是它可能的样子。所以我相信 SSL 是最好的选择。

PHP 内置了 openssl,因此您可以轻松使用它,这是我目前正在使用的。如果您打电话给您的托管服务提供商并要求他们启用应该不难的 openssl,那就是它尚未激活。

对于 Python,我不是 100% 了解可用的内容,但仅使用公钥加密就足够了,因为您的服务器将使用私钥解密此数据。

可以使用命令行生成公钥和私钥。这是一个链接:

http://travistidwell.com/blog/2013/02/15/a-better-library-for-javascript-asymmetrical-rsa-encryption/

他确实使用 javascript 库进行客户端加密,但是应该有 Python 的选项。

【讨论】:

    【解决方案2】:

    答案通常是“视情况而定”。如果您正在寻找的只是足够数量的数据的对称加密,您可能需要像 AES 这样的东西。然而,有很多方法可以使用加密,但最终可能会变得不安全,这就是为什么使用 https 是一个好主意,因为它的级别更高,更难出错。我不是安全研究人员,但这只是我在安全方面得到的一般建议。

    无论如何,有一个python library,您显然可以使用mcrypt 来处理PHP 本身的加密/解密。

    【讨论】:

    • 只有几点。您的加密数据可能是 8 位的。如果您正在进行小额传输,base64 编码可能是最简单的。如果您要传输大量数据,您可以使用transfer-encoding: chunked 流式传输 8 位加密数据,但您可能需要跳过箍来实现这一点。
    • 感谢@MattH,但我无法在 base64 中设置密码。感谢transfer-encoding: chunked,我需要先学习。不过我的数据不大。
    • @S.Mark base64 只是一种编码,而不是加密。它允许您通过非 8 位安全的传输对 8 位数据进行编码。我告诉你这是因为加密例程的输出可能是 8 位。例如,如果您想将 AES 加密的数据块 POST 发送到您的网站,则需要使用 base64 编码之类的东西。
    • 谢谢MattH,我明白了,在这种情况下,我想先用AES加密,然后再做base64编码。感谢您的帮助
    【解决方案3】:

    不要试图自己发明加密方案。这是极难做到的(即使是专业人士也无法定期正确地做到这一点)。 SSL 安全协议套件体现了数十年的研究和实施经验,您将无法重新发明。

    对于通过 HTTP 保护私人数据,唯一正确的答案是 SSL。其他任何事情都是对自己的伤害。

    【讨论】:

    • +1 感谢您的指出,但恐怕我的主机中暂时没有 SSL 选项。
    • SSL 和 HTTPS 不是一回事。如果您可以实现自己的自定义加密方案,那么您还拥有使用 SSL/TLS 所需的所有工具 - 而且您当然应该
    猜你喜欢
    • 2018-10-29
    • 2018-12-24
    • 2015-07-19
    • 1970-01-01
    • 2011-12-24
    • 2015-12-05
    • 1970-01-01
    • 1970-01-01
    • 2019-10-17
    相关资源
    最近更新 更多