1.背景信息: 我们需要破解⼀一个4-6位的密码. 密码可以包含从32(空格)到的任何ASCII字符 126(〜),但由于密码是由⼈人选择的,因此它们不不是任意字符串串。 你可以使⽤用您对常⻅见⼈人类弱点的了了 解来识别特定⽤用户使⽤用的密码。您的⽬目标是编写代码以尽可能多地猜测这些代码。 我已经⽣生成了了30个密码,并且已经完成了了SHA256哈希值计算。 密码1到10都是四个字符,密码11-30 是六个字符。 我会给你⼀一个密码⽂文件. 这个⽂文件包含320个byte。 前32个字节是第⼀一个密码的 SHA256哈希值,第⼆二个32字节是第⼆二个密码hash……….注意:6位数密码的源⽂文件还没办法下载,我 稍后会给你 . 你要编写⼀一个C程序来猜测密码。 也就是说,这是四个或六个字符SHA256哈希是您下载的哈希之⼀一 的序列列。您应该创建⼀一个⽣生成名为`crack’的可执⾏行行⽂文件的Makefile. 基本逻辑:你的C程序 ⽐比如猜了了⼀一个密码AAAA,然后你就⽣生成AAAA对应的sha256哈希值,然后和我给 你的源⽂文件对应⽐比较,如果有找到相同的就算猜对了了 总共三种模式: 第⼀一种: 如果在没有参数的情况下运⾏行行crack,它应该猜测,并针对SHA256哈希测试它们。 当它输⼊入⼀一个 时,它应该打印⼀一⾏行行,包括明⽂文密码,空格和1-30的整数,表示它匹配的是哪个哈希。 例例如 这可能是您⽤用于查找密码的模式。 其他两种模式只是⽤用来评估。 第⼆二种: 如果使⽤用⼀一个整数参数运⾏行行crack,则该参数会对它应该产⽣生多少猜测。 在此模式下,密码猜测应打 印到stdout,由换⾏行行符(`\ n’)分隔。 第三种: 如果使⽤用两个参数运⾏行行crack,则应将第⼀一个视为密码列列表的⽂文件名(每⾏行行⼀一个),第⼆二个视为 SHA256哈希密码列列表的⽂文件名(以32字节为⼀一组,没有换⾏行行符)。 然后它应该针对每个哈希测试 每个密码,并且结果输出就像第⼀一种那样产⽣生输出。它应该不不打印任何其他stdout。 如果要⽣生成其 他输出,请将其发送到stderr。 我会给你提供⼀一个SHA256的library. 写个⼩小程序,以便便更更改可⽤用的哈希值的数量量。 例例如,只读取整 个⽂文件,并计算它包含多少32字节块。 关于猜密码的建议: 为了了帮助您,我们提供了了⼤大约10,000个常⽤用密码的列列表. 注意:这些通常不不是四个字⺟母的密码。 获取候选四字⺟母密码列列表的最佳⽅方法是什什么?您还查看这个 ⽹网站https://www.thefreedictionary.com/4-letter-words.htm,下⾯面的漫画⾮非常有帮助。 为了了获取6位密码的源⽂文件:你需要先写⼀一个程序(!!!!重要!!!!!!): 执行基于与服务器的Die-Hellman密钥交换的质询响应协议。 回想一下,Die-Hellman密钥交换协议使双方能够在开放的通信渠道中产生共享秘密,这是 对手可以观察到的。 该过程从公共参数(g,p)开始。