3des
3-DES 加密 1B 和 1KB 的時間是否大致相同?
我正在使用 3-DES 加密 Java 中的一些數據。我決定執行一些測試並繪製一些圖形來決定如何優化打包數據以進行加密(查看加密/解密時間如何取決於純文字的長度),所以我測量了加密一千個增量字元串的時間大小(長度為 1 的第一個,長度為 2 的第二個等),然後反過來做同樣的事情(解密第一個結果)。
我發現解密時間隨著生成的純文字的大小而增加,儘管時間/字元通常會減少。但是,對於加密,所有測試花費的時間大致相同(加密 2 個字元的字元串比加密 1000 個字元的字元串花費的時間,大約 0.003 毫秒)。
這是 3-DES 固有的東西,Java 是如何實現它的,還是我錯誤地測量了時間?
這既是 DES(或任何分組密碼)又是程式問題。這不是問題,只是需要注意的事情。
時間/字元隨著明文的增加而減少的原因是初始成本和記憶體管理佔用了少量輸入的大部分時間。對於大輸入(兆字節+),時間/字元將穩定在一個相當一致的數字。記憶體管理技術和加密操作模式也會影響成本。例如,複製明文而不是將其記憶體空間直接讀取到塊密碼狀態。
DES 處理 64 位塊,每次 8 個字節。因此,您在 0 到 8 之間的每個字元的時間將是相同的,因為它正在處理單個塊。
還有測量的準確性,在 Java 中可能沒有使用高精度事件計時器,因此在測量需要幾分之一秒才能完成的事件時會非常不准確。例如,嘗試使用手動秒錶測量需要 0.02 秒才能完成的事情,您將永遠無法獲得一致甚至準確的測量結果。
由於塊密碼在處理塊輸入方面相當快,因此您需要處理幾兆字節的數據才能獲得更準確的時間/塊。嘗試 800 萬字節開始。在獲得準確的時間/塊之前,您需要增加數據大小以達到大約 10 秒的處理時間。