让我们说MD5或SHA-1?这两者的时间复杂度是多少?我试图在互联网上找到它,但它非常有限,我得到的是它们都是O(n)。任何人都可以进一步开导我吗?也许给我一个最糟糕的案例和最佳案例场景?
答案 0 :(得分:2)
MD5和SHA-1算法 - 两者都不是加密安全的,不应再使用 - 基于Merkle-Damgard construction。这意味着它们是由
构建的因为分组密码适用于固定大小的比特块,所以运行它的时间复杂度为O(1)。该块密码总共有Θ(n)个应用(输入被分成固定大小的块,所以这些块有Θ(n)),并且计算填充位的成本可能是O( 1)但可能是O(n)。总的来说,这意味着计算这些散列函数的运行时间是Θ(n),这是有道理的,因为每个位至少被访问一次,每位完成的工作是不变的。
分组密码通常以一种方式实现,使得它们在任何输入的位组合上运行完全相同的时间 - 或者至少是非常接近相同时间的东西 - 来尝试制作它们抵抗timing attacks,其中计算分组密码所需的时间量用于窃取一些比特。因此,如果这些散列函数在相同大小的不同输入上花费不同的时间量,那将是非常不寻常的。因此,独立于运行时为Θ(n)的事实,您不应期望在挂钟运行时看到太多变化。