假设您有权访问您信任的输出正确的“oracle”实现。
最明显的方法是通过实现运行一组已知的明文/哈希组合,看看它们是否按预期出现。可以通过生成随机明文(使用静态种子来保持其确定性)并使用oracle来查找它们的哈希值来构造任意数量的这些情况。
我看到的主要问题是它不能保证能够击中可能的角落情况。生成更多案例将减少丢失角落案件的可能性,但有多少案件就足够了?
还有一个问题是指定这些随机明文的长度,因为MD5采用任意长度的字符串作为输入。出于我的目的,我不关心长输入(例如,长度超过16个字节),所以你可以在你的答案中使用这个“特殊目的”MD5实现的事实,如果它使事情变得简单或者你可以如果一般情况完全相同,请回答一般情况。
答案 0 :(得分:3)
如果您有算法错误,那么每个哈希很可能都是错误的。哈希本质上是无情的。
由于大多数可能的错误都会很快暴露出来,所以你真的不需要那么多测试。要涵盖的主要内容是边缘情况:
如果这些都通过了,或许还有一两个代表性输入的测试,你可能对你的算法非常有信心。没有那么多边缘情况(除非更熟悉算法细节的人可以想到更多)。