代写 socket 1.背景信息:

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)开始。 双方选择sercret a和b,然后计算和 交换价值 。 双方之间计算的共享密钥是。
写⼀一个DiffieHellman.c的程序,使其运⾏行行下⾯面的协议.
使用这个的第一个字节作为你的Die-Hellman秘密b。将前两个十六进制数字转换为整数,并 将其用于b。 交换要求您在上载源后创建连接到服务器上端又7800。 Die-Hellman组件使用g = 15和p = 97.首先,发送您的用户名,然后是新行(`\ n’)。 将服务器g^b(modp)作为文 本发送(例如,12将作为“1”,“2”发送,而不是发送值为12的字节),然后是新行。 不要使

用适当的Die-Hellman随机b; 使用C源的SHA256的第一个字节。 这将让我们检查您的代码是 否正常工作。 服务器将以相同的格式向您发送一行。 计算通常的共享密钥,然后将其作为 文本发送到服务器(通过socket)。 服务器将发送一行文字说明您是否成功。 您可能想要他 显示在屏幕上。 整个过程如上图所示 然后,pwd6sha256就可以下载了. 使用32位或64位算术 将导致overflow。 相反,使用中第8周小课提到的挑战问题。
您的C代码(名为dh.c)应该在您的git存储库和LMS提交中。 包含dh.c编译和运行可能需要 的任何其他文件。 请注意,这个dh.c不需要像破解的源代码一样精致。 只要写一些有用的 东西,你就能在一个月的时间内理解它。 它只会在边缘情况下给分。 它将进行正确性测 试。

评判标准:
Code quality 在代码质量中考虑的因素包括:选择变量名称,注释,缩进,剩余的调试代码(例如,如果 它被#ifdef DEBUG禁用,则可以少量使用),指示进度的有用输出。使用-Wall编译时,代 码不应产生任何警告。
正确实现two-arguments的crack: 当给出一个猜测列表和一个哈希列表时,程序应该正确识别与猜测匹配的哈希值(如果有的 话)。 输出的顺序应该等于输入文件中猜测的顺序。
好的猜测:
有些密码比其他密码更有可能。 开始给code的分数将通过猜测很有可能的密码。 这将通过 检查代码来部分评估,部分通过使用单个参数运行时的裂缝行为来评估。 行为分数是针对 生成的前几个密码(比如前100个)统计代表程度而授予的。 对于代码检查分数,请包括一 行或两行的注释,说明如何生成密码,以及为什么它是好的。
找密码:
将密码和哈希值放在le found_pwds.txt中,位于您的顶级目录中 ,以及您提交的zip文件。 格式应与crack的输出相同 即PASSWORD空格HASH_ID换行符。
注意:
1.为了更好的测试: pwd4sha256.txt 里面有一个密码是 2.暴力搜索(即,尝试每个字符组合)足以找到四个字符密码,如果您的代码很高效. 一种 可能的方法是首先编写一个暴力搜索,然后在运行时,开发代码以下载剩余的哈希值,并确 定生成候选密码并高效生成候选密码。
3.尽早开始。 由于搜索6位数密码的速度很慢,因此您越早完成代码,您将发现的密码越 多。
一些有用的问题:
你不用提交这些问题的答案,但是思考也许有用:
1.并非所有暴力搜索都是相等的。 如何更早地发现密码? 2.您可以用其他语言编写支持程序。 例如,样本密码中最常用的字符是什么? 用您喜欢的 语言编写程序来计算它们,然后在C程序中使用该信息。

3.您可以选择随机或系统地猜测(例如猜测eeeee,eeeeet,eeeeea,eeeeeo,eeeeeei)。 每种 方法的优点和缺点是什么? 你能结合每个人的优势吗? 4.您可能希望停止程序并从它离开的位置重新启动它,而不是每次都重复初始序列。 如何在 不使用一个或两个命令行参数的情况下执行此操作? 5.如果您创建代码的SHA256哈希值然后修改它以将第一个字节硬编码为b的值,会发生什 么? 你怎么能避免这个问题?