【问题标题】:What is the testbench process for hashing algorithms?散列算法的测试平台流程是什么?
【发布时间】:2012-12-10 18:52:06
【问题描述】:

假设我编写了一个标准算法的实现,例如 MD* 或 SHA*:我怎么知道它是正确的?相同算法的不同实现必须产生相同的摘要?

【问题讨论】:

    标签: c++ unit-testing hash cryptography steganography


    【解决方案1】:

    参考文档本身包含少量的示例案例,可以使用。 (例如,"abc" 的哈希值在所有参考文档中。)此外,Aaron Gifford 在http://www.adg.us/computers/sha.html 上提供了许多测试用例。特别是,他对一些边界情况进行了测试(其中文本正好是块的长度,或者更少,以及其他一些特殊长度。如果您的实现为所有这些计算了正确的值,则有很有可能是正确的。

    【讨论】:

    • 所以……只有“经验法则”?
    • @user1849534 你不可能测试所有可能的输入;由于长度不受限制,因此案例的数量将是无限的。你需要的是一套好的测试用例。在参考文档和 Aaron Gifford 的站点之间,我总共有 26 个测试用例(但并非所有测试用例都对所有散列算法都有效)。如果测试用例涵盖了通常的极限情况,那么考虑到算法的性质,这应该足够了。
    • 我们没有对所有可能的函数进行算术运算,我们对此进行了数学分析,我正在考虑类似的事情......
    • @user1849534 我会鼓励良好的代码审查以及测试。定义协议的人已经完成了数学分析。代码审查应该能够验证您的代码是否实现了已记录的确切算法。并且测试可以合理地保证代码审查是正确的。
    【解决方案2】:

    是的,就是这样。但是,某些哈希算法带有变体/设置,因此如果是这种情况,您将需要匹配这些算法。

    一个很好的例子是通常如何提供 MD5 以允许您验证您的下载是否正确。为使其工作,MD5 哈希实现需要为所有实现产生相同的结果。

    【讨论】:

    • 我不知道。我会采用经过验证的应用程序并制作您自己的测试集。当然,大多数编程语言已经有一个可以为你生成哈希的库。
    • 只需使用一些带有 MD5 和的开源软件 tar-ball,并确保您得到相同的结果。如果没有,您的代码已损坏。一旦你可以在一个包装上得到它,尝试几个 mroe。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-17
    • 2011-01-02
    • 1970-01-01
    • 1970-01-01
    • 2010-09-19
    相关资源
    最近更新 更多