讓我們說MD5或SHA-1?這兩者的時間複雜度是多少?我試圖在互聯網上找到它,但它非常有限,我得到的是它們都是O(n)。任何人都可以進一步啓發我嗎?也許給我一個最壞的情況和最好的情況下?密碼散列函數的時間複雜度是多少?
0
A
回答
1
的MD5和SHA-1算法 - 這兩者都是不加密安全,絕不應該用更多的 - 是基於Merkle-Damgard construction。這意味着它們是由
- 開頭的塊加密這需要稱爲比特的輸入固定寬度塊,並輸出相同的尺寸的位的固定寬度的塊內置,
- 填充所述輸入了使用cryptographically secure padding scheme,然後
- 將塊密碼迭代地應用於輸入的一些位數的組合,加上初始化值或前一個塊密碼的輸出,將其分配給塊大小的幾倍。
由於分組密碼在固定大小的位塊上工作,因此運行它的時間複雜度爲O(1)。該塊密碼總共有Θ(n)個應用程序(輸入被拆分成固定大小的塊,因此這些塊有Θ(n)),並且計算填充位的代價可能是O( 1)但可能是O(n)。總的來說,這意味着計算這些散列函數的運行時間是Θ(n),這是有意義的,因爲每個位至少被訪問一次,並且每位完成的工作是恆定的。
分組密碼通常以一種方式實現,使得它們可以在任何輸入組合的位上運行完全相同的時間量,或者至少非常接近相同的時間量來嘗試創建它們抵抗timing attacks,其中計算分組密碼所需的時間量用於竊取一些比特。因此,如果這些哈希函數花費不同的時間在不同的相同大小的輸入上完成,那將是非常罕見的。因此,獨立於運行時間爲Θ(n)的事實,您不應該期望在掛鐘運行時看到很多變化。
相關問題
- 1. 鏈式散列表中的時間複雜度是多少
- 2. Collection.toArray()的時間複雜度是多少?
- 3. 下面的遞歸函數的時間複雜度是多少
- 4. 這個函數的時間複雜度是多少?
- 5. 方案中'assoc'函數的時間複雜度是多少?
- 6. clojure中count函數的時間複雜度是多少?
- 7. C++中std :: next_permutation()函數的時間複雜度是多少?
- 8. 獲取散列表中密鑰列表的時間複雜度?
- 9. 我的代碼中的時間複雜度是多少
- 10. 下面的僞代碼的時間複雜度是多少?
- 11. 我的代碼的時間複雜度是多少?
- 12. 以下代碼的時間複雜度是多少?
- 13. 代碼的時間複雜度是多少?
- 14. 這段代碼的時間複雜度是多少(來自leetcode)?
- 15. 以下代碼的時間複雜度是多少?
- 16. 以下代碼的時間複雜度是多少?
- 17. 這段代碼的時間複雜度是多少?爲什麼?
- 18. 這段代碼片段的時間複雜度是多少?
- 19. 以下代碼片段的時間複雜度是多少?
- 20. 這個算法(代碼)的時間複雜度是多少?
- 21. 這個僞代碼的時間複雜度是多少?
- 22. 函數時間複雜度
- 23. 添加n個數字的時間複雜度是多少
- 24. 劃分兩個數字的時間複雜度是多少?
- 25. 減少時間複雜度
- 26. 計算函數的空間複雜度和時間複雜度
- 27. 大O符號中下列代碼的時間複雜度是多少?
- 28. 確定給定散列槽的主機的運行時複雜度是多少?
- 29. 檢查字典是否有密鑰的時間複雜度是多少?
- 30. 分時排序算法的時間複雜度是多少?