Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.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发送加密文件,我需要能够执行以下操作: 客户端Delphi2010:使用我的应用程序附带的公钥加密文件并将其上载到服务器 服务器端PHP:使用存储在服务器上的我的私钥解密上传的文件 在上传的文件上工作。。。 听起来很简单,但我找不到任何可靠的代码/组件,我找到了以下组件: 。这就是我现在正在开发中使用的,但似乎不支持基于密钥对的加密RSA GPL,所以我不能在我的商业应用程序上使用它 :确实支持密钥对加密,但非常神秘。AFAIK没有文档,并且似乎不支持文件加密 我

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

客户端Delphi2010:使用我的应用程序附带的公钥加密文件并将其上载到服务器 服务器端PHP:使用存储在服务器上的我的私钥解密上传的文件 在上传的文件上工作。。。 听起来很简单,但我找不到任何可靠的代码/组件,我找到了以下组件:

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

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

:确实支持密钥对加密,但非常神秘。AFAIK没有文档,并且似乎不支持文件加密

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

实现我上面描述的,即密钥对加密 可以使用PHP进行解密 适用于大文件/流 在这里做梦!有一个简单的delphi/php演示,演示如何执行此操作: 仅限FOSS解决方案,我已经超出预算了:
啊,加密。有一种说法是,一个只懂一点密码的程序员比一个不懂密码的程序员危险得多

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

真实故事:事实上,我和这个图书馆的作者发生了一场小冲突,甚至从评论中被删除了。唉,我最后还是向他买了东西。算了。

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

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

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

编辑:

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

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

作为奖励,这将让您了解如何使用未经测试的EVP_密封件:

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;

好的免费加密没有什么意义-它需要相当多的编程、安全和数学技能。通常你不会使用RSA或类似的方法对整个文件进行加密,因为它通常速度较慢。使用对称算法进行加密,而不是使用非对称算法加密密钥。只要使用正确实现的标准算法,PHP和Delphi中的数据都是可用的。锁箱3 IMHO不是一个好的图书馆。@EugeneMayevski'EldoSCorp:你有一张很好的折扣券,可以给我买SecureBackbox吗?:@格达米,如果你私下联系我。那么,你的答案是否定的,还是肯定的,但这比我愿意追求的要难,而且我曾经和某人发生过争执?@RobKennedy-如果你觉得答案不值得你花时间,那么就投下一票。我只是不确定你的答案是什么。你会花时间还是金钱?我提供了一个到前面一个问题的链接,其中包含到几个开放源码库的链接,以及一个商业产品的链接,如果您需要Delphi中的crypto,它就是您所需要的。没有任何其他的补充,因为考虑到GPL被排除在外,没有更多的补充。