2012-01-25 24 views
1

我需要的,做功能的組合:什麼是壓縮+編碼+檢查+數組序列化的最快組合?

  • 數組序列(沒有對象,小 - 字符串3-7鍵值對,沒有提及)
  • 的上述數據有效性檢查(它是更好)
  • 加密以上(是否有任何加密方法驗證解密信息?)
  • 上面的壓縮(我不確定是否值得:帶寬/ CPU時間)

...數組。

一切都應該針對速度進行優化。

對於序列化數組,我考慮使用json_encode()而不是serialize(),因爲它更快。見Preferred method to store PHP arrays (json_encode vs serialize)

對於數據有效性檢查,我正在考慮使用sha1(),但我正在考慮crc32,因爲它速度更快,我不認爲碰撞很近。見Fastest hash for non-cryptographic uses?

對於加密我提出:

<?php 

function encode($pass, $data) { 
    return mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $pass, $data, MCRYPT_MODE_ECB); 
} 

function decode($pass, $data) { 
    return mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $pass, $data, MCRYPT_MODE_ECB); 
} 

$rand = str_repeat(rand(0, 1000), 5); 

$start = microtime(true); 
for($i = 0; $i <= 10000; $i++){ 
    encode('pass', $rand); 
} 

echo 'Script took ' . (microtime(true) - $start) . ' seconds for encryption<br/>'; 

$start = microtime(true); 
for($i = 0; $i <= 10000; $i++){ 
    encode('pass', $rand); 
} 

echo 'Script took ' . (microtime(true) - $start) . ' seconds for decryption'; 

結果是:

Script took 1.8680129051208 seconds for encryption 
Script took 1.8597548007965 seconds for decryption 

我寧願避免隨意性。我知道CBC模式更安全,但速度也更慢。

對於壓縮,我不知道什麼是更好的使用給定的事實,即產生的字符串是二進制和短。

是否有任何壓縮,不需要編碼,以便將結果字符串設置爲cookie?我知道sha1()例如只返回數字和字母。

這是一個複雜的問題。所以請隨時指出任何錯誤或不準確。 它包含很多主題,但基本上簡短的問題是如何安全快速地加密/解密陣列,同時具有小的代表性。

這是正確的順序嗎?

是否需要進行數據驗證,因爲在數據更改的情況下,產生的結果JSON 將無效?

是否有一個函數已經結合了那些或那些函數?

+0

爲什麼不將會話數據存儲在服務器端並根據需要回憶它?這將節省整個需要有一個加密的cookie。 – afuzzyllama

+0

我將就此和鏈接創建另一個問題。這是一個不同的話題。這個想法是爲了避免Memcached,NFS,會話數據庫或會話服務器。 –

+0

確保你只「知道」事情是真的;) –

回答

3

我知道,CBC模式是更安全,但它也慢

比歐洲央行?只有在數據超過幾個塊的情況下。

如果你想要最快的加密算法,那麼你就無法替代自己的測試 - 有點奇怪的是,PHP的sha1()實現比它的md5()快得多(我知道這些是哈希值 - 這是爲了說明性能取決於與算法一樣多)。

你爲什麼要嘗試使用它?如果它是一個加密的數據報,那麼內容對用戶來說是不透明的 - 如果他們試圖篡改它,那麼它很可能無法解壓縮,在極少數情況下它仍然解壓縮,然後解碼將失敗,但在遠程情況下,發生它應該很容易檢查其他修改 - 即使嵌入的CRC32似乎矯枉過正。

,以生成的字符串設定爲一個cookie

聽起來你使用了大量花哨的加密來掩蓋你的應用程序的基本不安全感 - 這很可能是開放給重播攻擊。而且你還有一個額外的複雜因素,可以確保你的數據適合cookie。爲什麼不僅僅使用服務器端會話和發送給客戶端的隨機值(如果要實現記憶我類型的函數,並且仍然具有常規會話,則不必使用PHP會話處理程序)。

+0

如果數據被改變,你是正確的壓縮失敗。關於cookie認爲:這不是掩蓋不安全感。基本上,cookie本身就是會話。重點不在於使用會話(和套件Memcached /服務器會話)。這是另一種解釋。在沒有初始向量的情況下使用CBC時,PHP會發出難看的通知。 –

+0

我認爲你是正確的PHP實現可能不同。我打算做一些研究,我會回來一些統計數據。 –

0

在我看來,只使用壓縮就足夠了。要逆向工程壓縮,需要很長時間。我可以推薦一個huffman壓縮。

+0

聽起來很有希望。我正在進行一些測試。 –

+0

轉發工程師也需要很長時間。除非你使用現有的。但是,這不會花費太長時間來進行逆向工程。 –

+0

@GregS:尤其適用於不同瀏覽器和7位字符集的應用程序。我在隱藏字段中使用它並下載當前的引擎狀態。 – Bytemain

相關問題