4
假设您可以访问您信任的输出正确的“oracle”实现。你会写什么测试来验证MD5实现的正确性?
最明显的做法似乎是通过实施运行一组已知的明文/散列组合,并查看它们是否按预期出现。通过生成随机明文(使用静态种子保持其确定性)并使用oracle来查找它们的散列,可以构建任意数量的这些情况。
我看到的主要问题是,它不能保证打到可能的角落案件。生成更多案例将减少错失案例的可能性,但有多少案例就足够了?
还有一个问题是指定这些随机明文的长度,因为MD5将任意长度的字符串作为输入。出于我的目的,我不关心长输入(比如说长度超过16个字节),所以如果事情变得更简单或者你可以简单地使用,那么你可以在你的答案中使用这是一个“特殊用途”MD5实现的事实如果一切都一样,则回答一般情况。