2010-04-30 33 views
0

我正在使用PHP Crypt_RSA(http://pear.php.net/package/Crypt_RSA)來加密和解密內容。內容爲1kb大小。以下是結果:RSA加密導致服務器執行超時


  1. keylength = 1024
  2. 加密功能需要時間:225秒

  1. keylength = 2048
  2. 加密功能需要時間:115秒

我需要減少這個執行時間,因爲大多數活的Apache服務器的有執行時間120秒的限制。如何減少這種執行時間? RSA算法文檔說只生成1024到2048個密鑰。我實際上試圖產生更大的密鑰,但它總是導致執行超時。

我該如何解決加密問題 - 解密執行時間?

感謝, 尼拉

+0

這些結果是反直覺*和*我看不出有任何代碼。 – 2010-05-01 00:45:24

回答

0

不要使用RSA加密的內容,使用RSA加密對稱密鑰,然後使用對內容進行加密。

對稱密碼AES使用的密鑰長度爲256位,即32個字節,比使用RSA進行加密/解密的數據少30倍,而不是您現在加密的千字節數據。

因此,115秒將減少到3-4秒,加上用於AES的加密/解密時間比RSA快得多。

+0

是的,這是真的,用這種方法,加密就像預期的那樣更快。現在我在服務器端試圖解密這些數據。 加密序列:獲得對稱密鑰,使用RSA公鑰加密,使用RSA加密的對稱密鑰加密內容 現在,當我到服務器端使用此數據.....我加密了內容。爲了解密這個,我將如何使用服務器私鑰?我可以再次生成RSA加密的對稱密鑰並解密內容。但是這不會是安全的......私鑰進入圖片的位置? – Nilambari 2010-04-30 12:54:55

+0

您不用「RSA加密的對稱密鑰」加密內容。您使用* original *對稱密鑰加密內容,但將RSA加密的對稱密鑰傳遞給收件人。收件人使用其私鑰從RSA加密版本派生出原始對稱密鑰,然後使用該原始對稱密鑰來解密數據。 – caf 2010-05-03 01:27:45

+0

謝謝,這解決了我的問題:-) – Nilambari 2010-05-03 14:17:49

0

您可能會考慮使用mcrypt或openssl代替您的加密/解密需求。有關示例,請參閱openssl_public_encrypt。這將比在Crypt_ *中完成的PHP實現快得多(即使它們使用bigint或其他C大整數實現(如gmp))。

1

讓您的鑰匙更大:)根據您的號碼,您將鑰匙尺寸加倍減半。我相信這是一個錯誤。

要做的第一件事就是切換到OpenSSL,它是C中的一個擴展。如果使用正確的構建,公鑰操作在彙編中完成,因此它比PHP代碼快得多。根據我的經驗,它至少快了10倍。

第二件事是使用像PKCS#7(OpenSSL支持這種)的標準信封。它將使用對稱密鑰來使用公鑰對密鑰進行加密和加密。它有很多小消息的開銷,但是長期來看你會受益。

+0

這是很好的建議;標準信封加密的相關函數是'openssl_seal()'和'openssl_open()'(儘管「unseal」會更符合邏輯...)。 – caf 2010-05-03 01:30:04

相關問題