>> ROB BOWDEN：我是抢夺和 让我们开裂。
所以请记住，从PSET规范 我们要需要使用
crypt函数。
对于该男子页面，我们有两个 哈希定义_xopensource。
不要担心，为什么 我们需要做的。
哈希包括unistd.h中。
>> 所以一旦出的方式，让 得到的实际方案。
我们需要做的第一件事是确保 用户输入一个有效的加密
在命令行中的密码。
请记住，该方案应该 运行像点斜线裂缝，
然后加密的字符串。
>> 所以，我们在这里检查，以确保 ARGC如果我们想
继续与程序。
如果argc是不是两个，这意味着 用户没有输入加密
在命令行中的密码，或者他们 进入不仅仅是加密
在命令行中的密码，其中 情况下，我们不知道做什么用的
命令行参数。
>> 因此，如果ARGC是两个，我们可以继续进行。
而在这里，我们要申报 一个可变的加密。
只是将原来的别名 argv1使整个
程序，我们不必叫它argv1， 然后你必须要考虑
关于这实际上意味着。
>> 所以最后，我们想要验证 的加密的密码的用户
进入实际上已经 加密的密码。
每地穴的手册页， 加密后的密码必须是13
字符长。
在这里，注意到我们哈希定义 加密长度为13。
所以我们要做的仅仅是确保 字符串长度的加密
密码是13。
>> 而且，如果它不是，我们希望 退出程序。
所以一旦出的方式，我们可以 现在实际上是试图找到什么
加密后的密码了 密码。
在这里，我们要抢盐 从加密的密码。
记住，每手册页 前两个字符加密
字符串，喜欢这里 -
50ZPJ等等 -
前两个字符给 我们所使用的盐
在隐窝功能。
>> 而在这里，我们看到，盐公顷。
所以，我们要复制前两个 字符，盐长度哈希
定义为两个。
我们要复制前两个字符 到这个数组，盐。
请注意，我们需要盐长度加上 一，因为我们仍然需要一个空
终结者结束时，我们的盐。
>> 然后我们要宣布这个数组， 客人，尺寸最大长度加
1，最大长度为哈希定义 八，因为最大的密码
是8个字符长。
我们要使用这个迭代 在所有可能的字符串，可以
有效的密码。
因此，如果有效的密码中的字符 只是一个，B，和c，然后
我们会遍历A，B，C， AA，BA，CA，依此类推，直到
我们能看到CCCCCCCC -
8个C。
>> 如果我们没有向下有效 密码，然后我们需要说
加密后的字符串是不 有效的开始。
所以，现在，我们达到这个而1环。
请注意，这意味着它的 一个无限循环。
>> 注意有没有break语句 里面的这个无限循环。
只有return语句。
所以，我们从来没有真正期望 退出循环。
我们只希望退出程序。
我已经添加print语句 这个循环的顶部刚刚打印出来
我们目前的猜测 密码是什么。
>> 现在，这个循环做？
它遍历所有可能的字符串 这可能是有效的密码。
我们要做的第一件事是 我们目前的猜测是什么
密码是。
我们将采取的盐，我们抓住 加密后的字符串，我们很
要加密的猜测。
这将给我们一个加密的猜测， 我们要比较
加密后的字符串，用户 在命令行中输入。
>> 如果它们是相同的，在这种情况下， 字符串比较将返回0，如果
它们是相同的，那么猜 生成的加密的密码
字符串，在这种情况下，我们可以打印 作为我们的密码和回报。
但是，如果他们不一样的，那 意味着我们的猜测是不正确的。
>> 我们想要遍历 下一个有效的猜测。
所以，这就是这一段时间 循环正在尝试做的。
这将重申我们的猜测 到下一个有效的猜测。
请注意，当我们说一个 我们的猜测有特定字符
达到的最大象​​征，在这里 哈希定义为一个波浪线，因为
这是最大的ASCII值字符 用户可以输入上面的
键盘，当字符到达 最大的象征，那么，我们要发送
它备份的最小的符号，这 是一个空间，又是最低的ASCII码
价值符号让用户能够 从键盘输入。
>> 因此，我们要集 的最小的符号。
然后，我们会去 到下一个字符。
那么，如何是我们的猜测 要重复？
好吧，如果有效的字符是A，B， 和c，那么我们就开始用，
它会遍历到B，它会 遍历到c。
c是我们最大的象征，因此，我们将设置 C回，最低的象征。
然后我们会遍历索引 到下一个字符。
>> 因此，如果最初的猜测是c时，下一个 字符将是空
终止符。
这里，请注意，如果该字符 我们现在要
增量是空终止， 然后我们将它设置为
最小的象征。
因此，如果猜测是C，那么，我们的 新的猜测将是一个。
而且，如果我们原来的猜测 CCCC，那么我们的新猜测
将是AAAAA。
>> 因此，每当我们达到最大的字符串 给定长度，那么我们
要实现的最小字符串 下一个的长度，这将
只是所有字符 最低的象征。
现在，这个检查在这里干什么？
好吧，如果指数从第八 字符至9个字符 -
所以我们加8个C的 我们之前的猜测 -
那么指数将会把重点放在 最后空终结我们的猜测
数组，它并不意味着实际上 用在我们的密码。
>> 因此，如果我们集中在这最后的空 终结者，那么我们还没有找到一个
有效使用的密码，只是八 字符，表示不存在
有效的加密的密码 给定的字符串。
我们必须要打印，称 我们无法找到一个有效的
密码，然后返回。
所以这个while循环迭代 在所有可能的字符串。
>> 如果发现任何加密 预期加密的字符串，它会
返回该密码。
它并没有发现任何东西，然后 它将返回，印刷
是不是能找到什么。
现在，请注意，在所有迭代 可能的字符串可能会
需要一段时间。
让我们真正看到如何 长期需要。
>> 让我们破解。
嗯，哎呀呀 - 说未定义 参考地穴。
所以请记住，对于p设置规范， 地穴的man页面，我们
需要链接隐窝。
现在，默认的命令 不知道你
要使用该功能。
>> 因此，让我们复制这个客户端命令 只需添加到年底
连接地穴。
现在，它编译。
因此，让我们在一个给定的运行破解 加密后的字符串 -
所以撒的。
所以这是相当快的。
>> 请注意，这13结束。
那么，凯撒的加密密码 恰好是13。
因此，让我们尝试其他密码。
让我们赫塞豪恩的加密 密码和尝试开裂，。
>> 因此，我们注意到已经达到 三个字符。
我们遍历所有可能 三个字符的字符串。
这意味着我们已经完成 遍历所有可能的一个
两个字符串。
现在，它看起来像这样去 在我们到达之前，需要一段时间的
四个字符的字符串。
这可能需要一两分钟。
>> 它没有采取一两分钟。
我们四个字符的字符串。
但是现在，我们需要遍历所有 可能四个字符的字符串，这
也许可能需要10分钟。
然后，当我们到达5个字符 字符串，我们需要遍历所有
的那些，这可能 采取了几个小时。
我们需要遍历所有可能的 六个字符的字符串，这
可能需要几天等等。
>> 因此，它可能需要很长的一个潜在的 遍历所有可能
八字符和字符串较少。
因此，注意到，这不一定是 非常有效的算法寻找
输入密码。
你可能会认为 是更好的方法。
例如，密码ZYX！32AB 可能不是一个很常见的密码，
而密码12345 可能很多较为常见。
>> 所以试图找到一个密码的方法之一 更快速的只是看
是比较常见的密码。
因此，例如，我们可以尝试读单词 从一本字典，并尝试所有
这些话作为我们的密码猜测。
现在，也许一个密码 是不是很简单。
用户也许有点聪明 并尝试附加一个数字
一个字的结尾。
>> 所以，也许他们的密码为password1。
所以，你可以尝试遍历所有单词 字典中的一个
追加到它的结束。
后话，说不定这样做，你会 追加两到它的结束。
>> 或者，也许用户甚至试图 更聪明，他们希望自己的
密码是“黑客”，但他们 要更换电子商务的所有实例
三分球。
所以，你可以做到这一点。
遍历所有单词在字典 但替换的字符
这些数字看起来像数字。
>> 所以这种方式，你可能会赶上什至更多 密码是很常见的。
但最终，只有这样，你可以 捕获所有密码暴力破解
迫使遍历所有 可能的字符串。
所以在最后，你需要遍历 从一个字符的所有字符串
八个字符，这可能需要 很长一段时间，但你需要做到这一点。
>> 我叫罗布鲍登。
这是破解。