Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 散列算法的测试台过程是什么?_C++_Unit Testing_Hash_Cryptography_Steganography - Fatal编程技术网

C++ 散列算法的测试台过程是什么?

C++ 散列算法的测试台过程是什么?,c++,unit-testing,hash,cryptography,steganography,C++,Unit Testing,Hash,Cryptography,Steganography,假设我编写了一个标准算法的实现,比如MD*或SHA*:我如何知道它是正确的?同一算法的不同实现必须产生相同的摘要?是的,就是这样。然而,有些散列算法带有变体/设置,因此如果是这种情况,您需要匹配这些变体/设置 一个很好的例子是如何经常给出MD5来允许您验证下载是否正确。为了实现这一点,MD5哈希实现需要为所有实现生成相同的结果。参考文档本身包含少量可使用的示例案例。(例如,“abc”的散列在所有参考文档中。)此外,Aaron Gifford还提供了许多测试用例。特别是,他对一些边境案件进行了测试

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

是的,就是这样。然而,有些散列算法带有变体/设置,因此如果是这种情况,您需要匹配这些变体/设置


一个很好的例子是如何经常给出MD5来允许您验证下载是否正确。为了实现这一点,MD5哈希实现需要为所有实现生成相同的结果。

参考文档本身包含少量可使用的示例案例。(例如,
“abc”
的散列在所有参考文档中。)此外,Aaron Gifford还提供了许多测试用例。特别是,他对一些边境案件进行了测试(其中文本正好是一个块的长度,或小于一个块的长度,以及一些其他特殊长度。如果您的实现计算了所有这些的正确值,则很有可能是正确的。

我不知道有任何错误。我会使用经过验证的应用程序,制作您自己的测试集。当然,大多数编程语言都已经使用了h有一个库可以为您生成哈希值。只需使用MD5 sum提供的开源软件tar ball,并确保获得相同的结果。如果没有,您的代码就被破坏了。一旦您可以在一个包上正确地获得它,请尝试几个mroe。所以…只有“经验法则”?@user1849534您不可能测试所有可能的输入;因为长度是未绑定的,所以案例的数量将是无限的。您需要的是一组好的测试案例。在参考文档和Aaron Gifford的站点之间,我总共有26个测试案例(但并非所有的哈希算法都有效)。如果测试用例涵盖了通常的极限情况,那么考虑到算法的性质,这应该足够了。我们没有对所有可能的函数进行算术,我们对此进行了数学分析,我正在考虑类似的事情…@user1849534我会鼓励良好的代码审查以及测试。mathematical分析已经由定义协议的人员完成。代码审查应该能够验证您的代码是否实现了已记录的精确算法。并且测试可以合理地保证代码审查是正确的。