我需要的,做功能的組合:什麼是壓縮+編碼+檢查+數組序列化的最快組合?
- 數組序列(沒有對象,小 - 字符串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
將無效?
是否有一個函數已經結合了那些或那些函數?
爲什麼不將會話數據存儲在服務器端並根據需要回憶它?這將節省整個需要有一個加密的cookie。 – afuzzyllama
我將就此和鏈接創建另一個問題。這是一個不同的話題。這個想法是爲了避免Memcached,NFS,會話數據庫或會話服務器。 –
確保你只「知道」事情是真的;) –