数据加密模块---hashlib

hash:散列,也成称‘哈希’,把任意长度的输入,通过散列算法,变化成固定长度的输出,---简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数

各输出:

MD5:128位,因一个十六进制字符占4位,所以最终hexdigest(就转成16进制)生成的是32位的字符串

SHA1:160位,同上,生成40位16进制数(串)

SHA256:256位,64位

虽然生成的‘数字指纹’(16进制串)越长越安全,但是生成耗时也会同比增长(输出多,必然算法更复杂,运行更耗时),占用空间大(128位长度的密码显然比64位的占用空间要多一倍),所以,目前最流行的为 SHA256

用法:update()方法:添加需要转换的字符串;hexdigest()方法,转十六进制

>>> hash = hashlib.sha256()
>>> hash.update('huang'.encode())

>>> hash.hexdigest()
'd8e52067b8c3d881595c6a25aea67f94570239ff19e058cd0866ba549af311c7'


>>> hash1 = hashlib.sha1()
>>> hash1.update(b'huang')
>>> hash1.hexdigest()
'21bc9b529e627b2b035aaf9bf5357db61ead2c3d'


>>> md = hashlib.md5()
>>> md.update(b'huang')
>>> md.hexdigest()
'4e8f794089b6b4ef55cd0399dca1433c'


>>> sha5 = hashlib.sha512()
>>> sha5.update(b'huang')
>>> sha5.hexdigest()
'de7c548b9d1a6258ba96b48720ac8c3b7daccbf16c3dcd3eefc4c2de3943ec84c3d7992f3e0215ee61932ceb02b29623d41440dddfd3f03369a2f099d36f6e20'


数据加密模块---hashlib

import hashlib, json

username = input('your usrname:')
password = input('your password:')

secret_passwd = hashlib.sha224((username+password).encode()).hexdigest()

file1 = open('secret_user_info.txt', 'r')
user_info = json.load(file1)

if username not in (user_info):
    user_info.setdefault(username, secret_passwd)
    with open('secret_user_info.txt', 'w') as f2:
        json.dump(user_info, f2)
    print('add user to db success!')
else:
    if secret_passwd == user_info[username]:
        print('login success!')
    else:
        print('erro password!')