我使用PHP Crypt_RSA(http://pear.php.net/package/Crypt_RSA)来加密和解密内容。内容大小为1kb。结果如下:
我需要减少这个执行时间,因为大多数实时apache服务器的执行时间限制为120秒。如何减少执行时间? RSA算法文档称只生成了1024 - 2048个密钥。我实际上试图生成更大的密钥,但它总是导致执行超时。
我如何减少加密 - 解密执行时间?
谢谢, 尼拉
答案 0 :(得分:1)
让你的钥匙更大:)根据你的数字,你通过加倍密钥大小将时间减半。我确定这是一个错误。
要做的第一件事是切换到OpenSSL,这是C中的扩展。如果使用正确的构建,公钥操作在汇编中完成,因此它比PHP代码快得多。根据我的经验,它至少快10倍。
要做的第二件事是使用像PKCS#7这样的标准信封(OpenSSL支持这一点)。它将使用对称密钥使用公钥加密和加密密钥。它对于小消息有很多开销,但是从长远来看你会受益。
答案 1 :(得分:1)
首先,我建议phpseclib - a pure PHP RSA implementation - 使用。 PEAR的Crypt_RSA的问题在于它不支持很多密钥格式,不支持RSA盲(因此容易受到定时攻击)并且不支持OAEP / PSS。
ZZ Coder建议使用PKCS#7。以下URL讨论了如何在PKCS#7的轻量级版本中使用phpseclib:
答案 2 :(得分:0)
不要使用RSA加密内容,使用RSA加密随后用于加密内容的对称密钥。
对称密码AES使用256位密钥长度,即32字节,使用RSA加密/解密的数据比现在加密的千字节数少约30倍。
因此,115秒将减少到3-4秒加上用于AES的加密/解密时间,这比RSA快得多。
答案 3 :(得分:0)
您可以考虑使用mcrypt或openssl代替加密/解密需求。有关示例,请参见openssl_public_encrypt。这将比Crypt_ *中的PHP实现快得多(即使他们使用bigint或其他C大整数实现,如gmp)。