学习hashlib模块的记录
本帖最后由 paypojie 于 2022-10-16 19:06 编辑解决一道练习题
夹带一点无关的 写在最前面 可以自动忽略 我加了曾经的初恋 也是我最好的朋友 但是现在加她 她有男朋友了 我好伤心 怎么办 她喜欢小王子一类的书 大家有啥好的建议
练习题来源https://www.liaoxuefeng.com/wiki/1016959663602400/1017686752491744#0
练习 根据用户输入的口令,计算出存储在数据库中的MD5口令:
def calc_md5(password):
pass
先上代码:
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模块
import hashlib
第二步定义一个 calc_md5()函数
def calc_md5(password):
第三步创建一个MD5加密算法对象 使用haslib模块的md5()方法 即可创建
md5 = hashlib.md5()
第四步 对已经创建好的md5加密算法对象使用update方法 这个update方法没有任何返回值 所有不需要赋值给变量 update()方法对象里面的参数是需要使用encode()方法编码的 先将password转换成字符串形式 然后再对其使用encode()方法进行编码
md5.update(str(password).encode('utf-8'))
第五步 返回摘要 通过对md5对象使用hexdigest()方法即可 再用return返回
return md5.hexdigest()
最后 调用函数 并将调用函数的结果打印
print(calc_md5('1234'))
第二部分 设计一个验证用户登录的函数,根据用户输入的口令是否正确,返回True或False:
截图:
完成函数里面的功能就可以了
代码
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:
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()函数
import hashlib
def login(user, password):
再创建一个md5加密算法对象 并对创建好的对象使用update()方法 update()方法里面传入的是已经编码好的待加密的password对象 和上面的其中一个步骤类似
md5 = hashlib.md5()
md5.update(password.encode('utf-8'))
然后进行条件判断 如果md5对象的摘要 与字典db中键对应的摘要相等 就返回为整 (哈希值也可以称为摘要)
if md5.hexdigest() == db:
return True
else:
return False
另一种写法也可以
if md5.hexdigest() == db:
return True
return False
摘要算法也称为哈希算法 散列算法 摘要算法是通过摘要函数f()将任意长度的数据date转换为一个长度固定的摘要 (摘要是一个数据串 一个十六进制的字符串)
完结 搞完这个差不多开班会了
{:301_972:}{:301_972:}{:301_972:}{:301_972:}{:301_972:}{:301_973:}{:301_973:}{:301_973:}{:301_973:}{:301_973:}
https://docs.python.org/3/library/hashlib.html#hashlib.scrypt
建议使用 scrypt 或类似的算法来储存处理后的密码,利用随机盐+复杂计算来预防彩虹表攻击 爱飞的猫 发表于 2022-10-16 23:03
https://docs.python.org/3/library/hashlib.html#hashlib.scrypt
建议使用 scrypt 或类似的算法来储存 ...
可是 我只是初学这个模块 而且最近也没啥信心 就不细看你发的链接了 {:301_999:}
页:
[1]