吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 988|回复: 2
收起左侧

[学习记录] 学习hashlib模块的记录

  [复制链接]
甜萝 发表于 2022-10-16 19:00
本帖最后由 paypojie 于 2022-10-16 19:06 编辑

                                                                                                 解决一道练习题


夹带一点无关的 写在最前面 可以自动忽略 我加了曾经的初恋 也是我最好的朋友 但是现在加她 她有男朋友了 我好伤心 怎么办 她喜欢小王子一类的书 大家有啥好的建议

练习题来源  https://www.liaoxuefeng.com/wiki/1016959663602400/1017686752491744#0

练习 根据用户输入的口令,计算出存储在数据库中的MD5口令:            
[Python] 纯文本查看 复制代码
def calc_md5(password):    
    pass

先上代码:
[Python] 纯文本查看 复制代码
import hashlib
def calc_md5(password):
    md5 = hashlib.md5()
    md5.update(str(password).encode('utf-8'))
    # print(md5.hexdigest())
    return md5.hexdigest()
# calc_md5('1234')
print(calc_md5('1234'))

代码注释去掉也行 就是会重复输出答案  题目是 # 根据用户输入的口令,计算出存储在数据库中的MD5口令:

因为要计算MD5口令 所以先导入haslib模块

[Python] 纯文本查看 复制代码
import hashlib

第二步定义一个 calc_md5()函数
[Python] 纯文本查看 复制代码
def calc_md5(password):

第三步创建一个MD5加密算法对象 使用haslib模块的md5()方法 即可创建
[Python] 纯文本查看 复制代码
md5 = hashlib.md5()

第四步 对已经创建好的md5加密算法对象使用update方法 这个update方法没有任何返回值 所有不需要赋值给变量 update()方法对象里面的参数是需要使用encode()方法编码的 先将password转换成字符串形式 然后再对其使用encode()方法进行编码
[Python] 纯文本查看 复制代码
md5.update(str(password).encode('utf-8'))

第五步 返回摘要 通过对md5对象使用hexdigest()方法即可 再用return返回
[Python] 纯文本查看 复制代码
return md5.hexdigest()

最后 调用函数 并将调用函数的结果打印
[Python] 纯文本查看 复制代码
print(calc_md5('1234'))

第二部分 设计一个验证用户登录的函数,根据用户输入的口令是否正确,返回True或False:
截图:

image.png

完成函数里面的功能就可以了

代码
[Python] 纯文本查看 复制代码
db = {
    'michael': 'e10adc3949ba59abbe56e057f20f883e',
    'bob': '878ef96e86145580c38c87f0410ad153',
    'alice': '99b1c2188db85afee403b1536010c2c9'
}

import hashlib
def login(user, password):
    md5 = hashlib.md5()
    md5.update(password.encode('utf-8'))
    if md5.hexdigest() == db[user]:
        return True
    else:
        return False


assert login('michael', '123456')
assert login('bob', 'abc999')
assert login('alice', 'alice2008')
assert not login('michael', '1234567')
assert not login('bob', '123456')
assert not login('alice', 'Alice2008')
print('ok')

还是老规矩 导入hashlib模块  因为这道题要用到 然后定义login()函数
[Python] 纯文本查看 复制代码
import hashlib
def login(user, password):

再创建一个md5加密算法对象 并对创建好的对象使用update()方法 update()方法里面传入的是已经编码好的待加密的password对象 和上面的其中一个步骤类似
[Python] 纯文本查看 复制代码
md5 = hashlib.md5()
    md5.update(password.encode('utf-8'))

然后进行条件判断 如果md5对象的摘要 与字典db中键对应的摘要相等 就返回为整 (哈希值也可以称为摘要

[Python] 纯文本查看 复制代码
if md5.hexdigest() == db[user]:
        return True
    else:
        return False


另一种写法也可以
[Python] 纯文本查看 复制代码
if md5.hexdigest() == db[user]:
        return True
    return False

摘要算法也称为哈希算法 散列算法 摘要算法是通过摘要函数f()将任意长度的数据date转换为一个长度固定的摘要 (摘要是一个数据串 一个十六进制的字符串)

完结 搞完这个差不多开班会了                                   

























发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

爱飞的猫 发表于 2022-10-16 23:03
https://docs.python.org/3/library/hashlib.html#hashlib.scrypt

建议使用 scrypt 或类似的算法来储存处理后的密码,利用随机盐+复杂计算来预防彩虹表攻击

免费评分

参与人数 2吾爱币 +2 热心值 +2 收起 理由
甜萝 + 1 + 1 我很赞同!
li645944229 + 1 + 1 热心回复!

查看全部评分

 楼主| 甜萝 发表于 2022-10-16 23:15
爱飞的猫 发表于 2022-10-16 23:03
https://docs.python.org/3/library/hashlib.html#hashlib.scrypt

建议使用 scrypt 或类似的算法来储存 ...

可是 我只是初学这个模块 而且最近也没啥信心 就不细看你发的链接了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 05:20

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表