我正在学习密码学并使用 OPENSSL 来实现我正在学习的任何内容。最近,我发现了一个作业问题,并正在尝试解决它。除了这个问题,我对大多数问题的理解都没有问题。
4 任务2:单向属性与无冲突属性在本任务中,我们将研究常见散列函数的两个属性之间的区别:单向属性与无冲突属性。我们将使用蛮力方法来查看破坏这些属性中的每一个需要多长时间。您需要编写自己的 C 程序来调用 openssl 加密库中的消息摘要函数,而不是使用 openssl 的命令行工具。可以在 http://www.openssl.org/docs/crypto/EVP_DigestInit.html找到文档. 计算机安全教育实验室,CMSC 414,2013 年春季 2 由于大多数哈希函数对这两个属性的蛮力攻击具有很强的抵抗力,因此我们需要数年时间才能使用蛮力方法来破解它们。为了使任务可行,在所有这个项目中,我们将哈希值的长度减少到 24 位。我们可以使用任何单向哈希函数,但我们只使用哈希值的前 24 位。编写一个程序,给定一个 24 位的散列值,找到一个匹配的文本(只有小写的 ASCII 字符)。您的程序将不得不重复 1) 生成随机文本,2) 对其进行哈希处理,3) 将低 24 位与输入进行比较。您的程序(源代码必须称为 task2.c)将按如下方式调用:
./task2 <digest name> <hash value>
例如,
./task2 sha256 2612c7. . .
您的程序必须将获胜文本写入 task2.out。请确保输出可读可写,即:
open("task2.out", O`enter code here` WRONLY | O CREAT, 0644);
我们将使用命令行工具进行验证,例如
openssl dgst -sha256 task2.out
. 问题:您必须散列多少文本才能找到特定的散列?(给出三个试验的平均值)
我无法理解如何开始编写我的程序。非常感谢任何输入。因为我不是为家庭作业解决它。我正在寻找一些指针而不是代码。