freeCodeCamp/curriculum/challenges/chinese/09-information-security/information-security-projects/sha-1-password-cracker.md

3.1 KiB
Raw Blame History

id title challengeType forumTopicId helpCategory dashedName
5e46f983ac417301a38fb933 SHA-1 密码破解器 10 462374 Python sha-1-password-cracker

--description--

你将通过使用我们的 Replit 入门代码 来完成本项目。

我们仍在开发 Python 课程的交互式教学部分。 目前,你可以在 YouTube 上通过 freeCodeCamp.org 上传的一些视频学习这个项目相关的知识。

--instructions--

密码不应以纯文本形式存储。 它们应该存储为哈希值,以防万一密码列表被泄露。 然而,并不是所有的哈希都是一样的。

在这个项目中,你将通过创建一个密码破解器来找出使用 SHA-1 散列的密码,从而了解到良好安全的重要性。

创建一个函数,该函数接受密码的 SHA-1 哈希值,如果它是使用的前 10,000 个密码之一,则返回该密码。 如果 SHA-1 哈希不是数据库中的密码,则返回“密码不在数据库中”。

该函数应该对 top-10000-passwords.txt 中的每个密码进行散列,并将其与传递给函数的散列进行比较。

该函数应采用名为 use_salts 的可选第二个参数。 如果设置为 true则文件 known-salts.txt 中的每个 salt 字符串,都应该在散列之前,和将它与传递给函数的哈希值进行比较之前,添加到 top-10000-passwords.txt 中的每个密码的之前和之后。

以下是一些用于测试该功能的散列密码:

  • b305921a3723cd5d70a375cd21a61e60aabb84ec 应该返回 “sammy123”
  • c7ab388a5ebefbf4d550652f1eb4d833e5316e3e 应该返回 “abacab”
  • 5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8 应该返回 “password”

以下是一些散列密码,用于在 use_salts 设置为 True 时测试该功能:

  • 53d8b3dc9d39f0184144674e310185e41a87ffd5 应该返回 “superman”
  • da5a4e8cf89539e66097acd2f8af128acae2f8ae 应该返回 “q1w2e3r4t5”
  • ea3f62d498e3b98557f9f9cd0d905028b3b019e1 应该返回 “bubbles1”

hashlib 库已经为你导入。 你应该在你的代码中使用它。 在此了解更多关于 “hashlib” 的信息

开发

password_cracker.py 中编写你的代码。 对于开发,你可以使用 main.py 来测试你的代码。 单击“运行”按钮,main.py 将运行。

测试

此项目的单元测试在 test_module.py 中。 为了你的方便,我们将测试从 test_module.py 导入到 main.py。 只要你点击“运行”按钮,测试就会自动运行。

提交

复制项目的 URL 并将其提交给 freeCodeCamp。

--hints--

它应该通过所有的 Python 测试。


--solutions--

  # Python challenges don't need solutions,
  # because they would need to be tested against a full working project.
  # Please check our contributing guidelines to learn more.