欢迎回来｡
我们刚刚了解了密码API, 以及该API如何使我们不信任任何人｡
也就是说, 我们只信任自己,
我们只会给予API一些我们觉得舒服的信息, 这样它就可以用一些数据来响应我们, 然后我们可以在我们自己的机器上计算这些数据,
假设这些机器更安全｡
所以我们在这里所做的不是给出密码的整个哈希值, 而是只给予出一小部分｡
前五个字符, 现在他们在他们的数据库和网站上有接近6亿个密码｡
现在可能只知道我们是几百个有着相似的初始哈希值的人中的一员, 但他们永远不会知道我们的密码｡
但是有了这个响应数据, 我们现在可以检查我们的完整哈希, 看看密码是否曾经被推迟或被黑客攻击过｡
我们开始写程序吧, 因为理想情况下, 在这个响应中, 我现在可能有几百个这样的哈希表,
我可以对照它们进行检查｡
让我们想想我们想做什么｡
所以理想情况下我们有一个函数, 这个函数就是请求.
应用程序接口｡
数据, 这就是我们在这里所做的｡
准备好后, 我们将把它移到这里, 在这里, 我们将为它给予查询字符｡
所以我们要给予它这个散列版本的密码｡
所以这是一个函数, 我们先把它传递过去.
但它会请求我们的数据并给予我们一个回应｡
接下来, 我们要检查这个响应, 这样我们就可以说我们要检查pwned API检查,
在这里我们将给予我们的密码｡
这是我们的实际密码在我们的情况下将是密码｡
一, 二, 三, 一, 二, 三
在这里, 我们要做一些检查｡
我们想说过牌｡
密码｡
如果它存在于API中｡
回应｡
从这上面
所以现在, 我们先不谈这个｡
所以我们来看看第一个｡
即请求API数据｡
我们已经在这里做了一些｡
好吧, 我知道了
我要把这段代码移走｡
在这里｡
确保我们有填充现在在这里, 而不是这个强度｡
我会给予这个查询字符, 我们称之为函数width, 这样它就是动态的｡
同样, 我们将请求URL, 我们将得到响应｡
在这里我们要检查一下｡
我们会说如果响应点状态, 因为记住, 我们可以检查我们的响应, 如果状态是200, 或者在这个例子中,
如果状态不等于200｡
在这种情况下, 我们只引发一个错误｡
所以我会说, raise, 我们会做一个运行时错误, 我们会说, 好吧, 让我们用一个F字符串, 我们会说｡
空气｡
正在撷取｡
然后我们将给予它状态代码, 使它处于响应状态｡
哦, 实际上这是状态代码
我们在这里输入状态代码, 然后输入check｡
API, 然后重试｡
好吧, 如果我们犯了错误, 这应该是我们的错误｡
让我们来测试一下｡
我只是｡
让我们做一个不存在的API｡
所以我就在这里乱写一通｡
如果我保存并运行这个｡
我必须运行这段代码｡
我们只需要请求API数据, 查询字符为.
一, 二, 三, 一, 二, 三
你知道吗？
不管我做不做, 这件事都会传开的｡
所以我们就这么做吧, 因为这不是哈奇版本｡
我实际上得到了一个python错误, 这里的类型只能连接字符串, 而不能连接整数｡
我们可以把它转换成一个字符串, 因为我们要把它添加到URL中｡
如果我们运行这个｡
好吧, 看那个｡
我们引发了一个运行时错误｡
我们有一个运行时错误｡
获取400时出错｡
请检查API, 然后重试｡
好的, 这部分是有效的, 但是在这个例子中, 如果我们没有那个错误,
我们就说我们会返回响应｡
同样, 我们只是在编写小而简单的函数｡
在本例中, 我们只需要请求API数据, 这样就可以在整个代码中使用它｡
太棒了｡
现在, 下一部分有点棘手, 因为我们必须通过SHA 1算法运行密码｡
幸运的是, Python有一个内置的模块, 我们可以这样做, 所以我们可以实际上做导入哈希库｡
如您所见, 它是一个内置模块, 因此如果需要, 您可以阅读更多有关它的内容｡
在我们的例子中, 我们能够像在那个网站上使用这个库那样进行SHA1哈希｡
在这里｡
我们要做的是, 首先, 我希望能够对我的密码进行哈希运算｡
我们把过去的去掉, 比如说sha, one, password, 我们可以使用这个哈希库, 就像这个哈希库, SHA,
one, 这就是我们要用的哈希算法｡
这可能会有点棘手, 但你可以阅读文档｡
我来教你怎么做｡
在我们的例子中, 我们可以使用密码, 我们希望使用UTF 8编码｡
这是很标准的｡
其实你知道吗？
让我来告诉你这是干什么的｡
我会输入print, 然后输入password, 然后输入UTF 8.
所以我们先这样吧｡
现在, 我将把它注释掉｡
我将调用Pwned API check, 然后依次执行一, 二, 三.
让我们把这个弄清楚｡
将保存并运行这段代码｡
好了, 已经加密了｡
你看到这个小B了吗？
我将向您展示在此之后移除ENCODE时会发生什么｡
接下来, 当我们使用散列库SHA1时｡
让我复制一下这个｡
如果我只是运行这个｡
我得到了一个SHA1哈希对象｡
在这之后, 我们可以这样调用. hex digest｡
如果我运行这个｡
嗯嗯嗯
那我们怎么查呢？
我们可以到hash库中搜索hex digest｡
所以在这里, 在任何时候, 你都可以要求它提供数据连接的摘要, 等等, 等等,
十六进制摘要｡
所以这对我们来说并不能解释什么｡
让我们进入下一部分, 下一部分, 就这样, Hex Digest｡
它会传回只包含十六进制数字的双倍长度字串物件｡
我们需要做的就是把这个对象转换成十六进制字符串｡
为了与API保持一致, 下一部分是将所有这些转换为大写｡
所以如果我在这里做上面的｡
然后保存并再次运行｡
一切都是大写的, 就像我们看沙一时看到的那样｡
所以这只是一些你不需要知道的东西｡
你只需要你可以谷歌一下, 看看如何实际使用它｡
现在, 让我向您展示当我们不使用UTF 8 ENCODE时会发生什么｡
所以如果我像这样做, 然后运行这个｡
你看到了吗？
我收到一个错误｡
Unicode对象必须在哈希之前进行编码｡
所以它实际上会给你一个很好的错误, 我们可以用UTF 8编码｡
所以这只是标准｡
再说一次, 不要太疯狂｡
如果你愿意的话, 你可以自己阅读编码和UTF 8｡
这里的关键是, 在它结束时, 我们有一个SHA 1密码, 我们可以发送｡
让我把这些都复制一遍｡
我去把指纹取下来｡
在这里, 我们将有我们的SHA一密码｡
太棒了｡
所以现在, 我们只返回这个SHA值｡
密码｡
如果我运行这个｡
看起来我们的密码起作用了｡
我们什么都没印, 但希望如此｡
我们得到了这个sha的一个密码｡
在下一个视频中, 我想尝试将其发送到我们的API, 看看我们会得到什么样的响应｡
就这么办吧
休息一下｡
下次见｡