好友
阅读权限30
听众
最后登录1970-1-1
|
甜萝
发表于 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:
截图:
完成函数里面的功能就可以了
代码
[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转换为一个长度固定的摘要 (摘要是一个数据串 一个十六进制的字符串)
完结 搞完这个差不多开班会了
|
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|