Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.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
Delphi中的安全密钥对加密解决方案&;PHP?_Delphi_Security_Encryption_Rsa_Lockbox 3 - Fatal编程技术网

Delphi中的安全密钥对加密解决方案&;PHP?

Delphi中的安全密钥对加密解决方案&;PHP?,delphi,security,encryption,rsa,lockbox-3,Delphi,Security,Encryption,Rsa,Lockbox 3,我的应用程序通过internet发送加密文件,我需要能够执行以下操作: (客户端Delphi 2010):使用我的应用程序附带的公钥加密文件&将其上载到服务器 (服务器端PHP):使用存储在服务器上的我的私钥解密上传的文件 (处理上传的文件…) 听起来很简单,但我找不到任何可靠的代码/组件,我找到了以下组件: 。这就是我现在正在开发中使用的,但似乎不支持基于密钥对的加密(RSA?) (GPL)所以我不能在我的商业应用程序上使用它 :支持密钥对加密,但非常隐蔽(AFAIK没有文档),并且似乎不支持

我的应用程序通过internet发送加密文件,我需要能够执行以下操作:

  • 客户端Delphi 2010):使用我的应用程序附带的公钥加密文件&将其上载到服务器
  • 服务器端PHP):使用存储在服务器上的我的私钥解密上传的文件
  • (处理上传的文件…)
  • 听起来很简单,但我找不到任何可靠的代码/组件,我找到了以下组件:

  • 。这就是我现在正在开发中使用的,但似乎不支持基于密钥对的加密(RSA?)

  • (GPL)所以我不能在我的商业应用程序上使用它

  • :支持密钥对加密,但非常隐蔽(AFAIK没有文档),并且似乎不支持文件加密

  • 我的问题是:是否有一个安全/可靠的加密组件:

  • 实现上述目标(即密钥对加密)
  • 可以使用PHP进行解密
  • 适用于大文件/流
  • 这里做梦!)有一个简单的delphi/php演示,演示了如何做到这一点:)
  • 仅限FOSS解决方案,我已经超出预算:)

  • 啊,加密。有一种说法是,一个只懂一点密码的程序员比一个不懂密码的程序员危险得多

    与此类似,我花了相当长的时间试图找到一种使用开源实现数字XML签名的方法。我只是在系好安全带,拿到一张照片之前。从纯粹的货币意义上讲,它并不便宜,而是我迄今为止最好的投资之一


    (真实故事:事实上,我和这个库的作者发生了一场小的激烈战争,甚至被从评论中删除。唉,我最终还是从他那里买了。算了吧。)

    我会选择OpenSSL。
    PHP似乎对它有很多支持,尽管我实际上还没有尝试过: 例如和

    使用我在这里多次提到的东西,只需稍加努力,就可以使Delphi与OpenSSL很好地协同工作:。这一页上也有一些很好的例子。看看Indy OpenSSL导入

    不是特定的组件,但绝对是免费的、灵活的,并且完全有可能在安全方面击中自己的脚:-)

    编辑:

    对于Delphi,我会考虑使用EVPyCudio*函数,您可以在下面找到我的版本LIEBYA32.PAS文件。您对此进行了定义,因为Indy不会出现或实现很多/任何实际的EVP_uu函数,因此需要导入函数声明和一些其他例程

    对于PHP来说,这似乎是正确的对应

    作为奖励,这将让您了解如何使用EVP_Seal*材料(未经测试):


    好的免费加密没有什么意义——它需要相当多的编程、安全和数学技能。通常你不会使用RSA或类似的方法对整个文件进行加密,因为它通常速度较慢。使用对称算法进行加密,而不是使用非对称算法加密密钥。只要使用正确实现的标准算法,PHP和Delphi中的数据都是可用的。锁箱3 IMHO不是一个好的图书馆。@EugeneMayevski'EldoSCorp:你有一张很好的折扣券,可以给我买SecureBackbox吗?:)@格达米,如果你私下联系我。那么,你的答案是否定的,还是肯定的,但这比我愿意追求的要难,而且我曾经和某人发生过争执?@RobKennedy-如果你觉得答案不值得你花时间,那么就投下一票。我只是不确定你的答案是什么。你会花时间还是金钱?我提供了一个到前面一个问题的链接,其中包含到几个开放源码库的链接,以及一个商业产品的链接,如果您需要Delphi中的crypto,它就是您所需要的。没有任何其他补充,因为没有太多(考虑到GPL被排除在外,甚至更少)
    function EVPSeal(ASource: TBytes; const APublicKey: PEVP_PKEY; out Key: TBytes; out IV: TBytes): TBytes; 
    var
      cipher: PEVP_CIPHER;
      ctx: EVP_CIPHER_CTX;
      buf: TBytes;
      block_size, buf_start, out_len, keysize: integer;
      ek: array[0..0] of PByte;
      ekl: array[0..0] of integer;
      pubk: array[0..0] of PEVP_PKEY;
    begin
      keysize := EVP_PKEY_size(APublicKey);
      cipher := EVP_aes_256_cbc;
      SetLength(IV, EVP_MAX_IV_LENGTH);
      SetLength(Key, keysize);
      ek[0] := @Key[0];
      pubk[0] := APublicKey;
      buf_start := 0;
      EVP_CIPHER_CTX_init(@ctx);
      try
        EVP_SealInit(@ctx, cipher, @ek[0], @ekl, @IV[0], @pubk[0], 1);
        block_size := EVP_CIPHER_CTX_block_size(@ctx);
        SetLength(buf, Length(ASource) + block_size);
        SetLength(Key, ekl[0]);
        EVP_SealUpdate(@ctx, @buf[buf_start], out_len, @ASource[0], Length(ASource));
        Inc(buf_start, out_len);
        EVP_SealFinal(@ctx, @buf[buf_start], out_len);
        Inc(buf_start, out_len);
        SetLength(buf, buf_start);
        result := buf;
      finally
        EVP_CIPHER_CTX_cleanup(@ctx);
      end;
    end;