0

我正在使用 PHP Crypt_RSA ( http://pear.php.net/package/Crypt_RSA ) 来加密和解密内容。内容大小为 1kb。以下是结果:


  1. 密钥长度 = 1024
  2. 加密功能耗时:225秒

  1. 密钥长度 = 2048
  2. 加密功能耗时:115秒

我需要减少此执行时间,因为大多数实时 apache 服务器的执行时间限制为 120 秒。如何减少此执行时间?RSA 算法文档说仅生成 1024 - 2048 个密钥。我实际上试图生成更大的密钥,但它总是导致执行超时。

我如何减少加密 - 解密执行时间?

谢谢,尼拉

4

4 回答 4

1

使您的密钥更大:) 根据您的数字,您可以通过将密钥大小加倍来将时间减半。我确定这是一个错误。

首先要做的是切换到 OpenSSL,它是 C 语言的一个扩展。如果你使用正确的构建,公钥操作是在汇编中完成的,所以它比 PHP 代码快得多。根据我的经验,它至少快 10 倍。

第二件事是使用像 PKCS#7 这样的标准信封(OpenSSL 支持这一点)。它将使用对称密钥加密并使用公钥加密密钥。它对小消息有很多开销,但从长远来看,你会受益。

于 2010-04-30T12:15:39.133 回答
1

首先,我建议使用phpseclib - 一个纯 PHP RSA 实现。PEAR 的 Crypt_RSA 的问题在于它不支持很多密钥格式,不执行 RSA 致盲(因此容易受到定时攻击)并且不支持 OAEP / PSS。

ZZ Coder 建议使用 PKCS#7。以下 URL 讨论了如何在 PKCS#7 的轻量级版本中使用 phpseclib:

http://area51.phpbb.com/phpBB/viewtopic.php?f=84&t=33024

于 2011-05-02T19:07:42.643 回答
0

不要使用 RSA 加密内容,使用 RSA 加密对称密钥,然后使用该对称密钥加密内容。

对称密码 AES 使用 256 位的密钥长度,即 32 字节,使用 RSA 加密/解密的数据比您现在加密的千字节数据少约 30 倍。

因此 115 秒将减少到 3-4 秒加上用于 AES 的加密/解密时间,这比 RSA 快得多。

于 2010-04-30T09:10:41.947 回答
0

您可以考虑使用 mcrypt 或 openssl 来满足您的加密/解密需求。有关示例,请参见 openssl_public_encrypt。这将比在 Crypt_* 中完成的 PHP 实现快得多(即使他们使用 bigint 或其他 C 大整数实现,如 gmp)。

于 2010-04-30T10:01:32.123 回答