您将编写哪些测试来验证MD5实现的正确性?

时间:2011-04-11 20:30:44

标签: testing md5

假设您有权访问您信任的输出正确的“oracle”实现。

最明显的方法是通过实现运行一组已知的明文/哈希组合,看看它们是否按预期出现。可以通过生成随机明文(使用静态种子来保持其确定性)并使用oracle来查找它们的哈希值来构造任意数量的这些情况。

我看到的主要问题是它不能保证能够击中可能的角落情况。生成更多案例将减少丢失角落案件的可能性,但有多少案件就足够了?

还有一个问题是指定这些随机明文的长度,因为MD5采用任意长度的字符串作为输入。出于我的目的,我不关心长输入(例如,长度超过16个字节),所以你可以在你的答案中使用这个“特殊目的”MD5实现的事实,如果它使事情变得简单或者你可以如果一般情况完全相同,请回答一般情况。

1 个答案:

答案 0 :(得分:3)

如果您有算法错误,那么每个哈希很可能都是错误的。哈希本质上是无情的。

由于大多数可能的错误都会很快暴露出来,所以你真的不需要那么多测试。要涵盖的主要内容是边缘情况:

  • 长度= 0(输入为空)
  • 长度= 1
  • 长度= 16
  • 输入包含至少一个值为0的字节
  • 输入中重复的字节模式(这对MD5来说是一个有意义的边缘情况吗?)

如果这些都通过了,或许还有一两个代表性输入的测试,你可能对你的算法非常有信心。没有那么多边缘情况(除非更熟悉算法细节的人可以想到更多)。