22.hashlib模块

hashlib

1.常见的几种加密方法及其使用方法:

import hashlib

# md5
hash = hashlib.md5()
hash.update(bytes(‘admin‘, encoding=‘utf-8‘))
print(hash.hexdigest())
print(hash.digest())
‘‘‘
21232f297a57a5a743894a0e4a801fc3
b‘!#/)zW\xa5\xa7C\x89J\x0eJ\x80\x1f\xc3‘
‘‘‘

# sha1
hash = hashlib.sha1()
hash.update(bytes(‘1‘, encoding=‘utf-8‘))
print(hash.hexdigest())
‘‘‘
356a192b7913b04c54574d18c28d46e6395428ab
‘‘‘

# sha256
hash = hashlib.sha256()
hash.update(bytes(‘1‘, encoding=‘utf-8‘))
print(hash.hexdigest())
‘‘‘
6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b
‘‘‘

# sha384
hash = hashlib.sha384()
hash.update(bytes(‘1‘, encoding=‘utf-8‘))
print(hash.hexdigest())
‘‘‘
47f05d367b0c32e438fb63e6cf4a5f35c2aa2f90dc7543f8a41a0f95ce8a40a313ab5cf36134a2068c4c969cb50db776
‘‘‘

# sha512
hash = hashlib.sha512()
hash.update(bytes(‘1‘, encoding=‘utf-8‘))
print(hash.hexdigest())
‘‘‘
4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a
‘‘‘

 缺陷:因为每台电脑都可以进行加密,有些机器会一直运算产生密文映射库

    所以以上加密算法虽然依然非常厉害,但时候存在缺陷,即:通过撞库可以反解。

    因此,有必要对加密算法中添加自定义key再来做加密。

import hashlib

# md5
hash = hashlib.md5()
hash = hashlib.md5(bytes(‘自己定义的口味‘, encoding=‘utf-8‘))
hash.update(bytes(‘1‘, encoding=‘utf-8‘))
print(hash.hexdigest())
‘‘‘
0bdd27adb563c7c3198b00de20a9a972
‘‘‘

注意事项:加密算法无法直接对一个字符或者字符串加密,我们必须这些字符串转换成bytes类型再进行加密

课后拓展:将之前的用户登录程序,拓展成一个可以安全的,给用户密码加密的程序

import hashlib

def md5(arg):
    ooo = hashlib.md5(bytes("吴文", encoding=‘utf-8‘))
    ooo.update(bytes(arg, encoding=‘utf-8‘))
    return ooo.hexdigest()

def register(user, pwd):
    with open(‘db‘, ‘a‘, encoding=‘utf-8‘) as f:
        pwd = md5(pwd)
        temp = user + ‘|‘ + pwd + ‘\n‘
        f.write(temp)

def login(user, pwd):
    with open(‘db‘, ‘r‘, encoding=‘utf-8‘) as f:
        for line in f:
            user1, pwd1 = line.strip().split(‘|‘)
            if user == user1 and md5(pwd) == pwd1:
                return True

def main():
    i = input("1,登录;2,注册  :")
    if i == ‘2‘:
        user = input("用户名:")
        pwd = input("密码:")
        register(user, pwd)
    elif i == 1:
        user = input("用户名:")
        pwd = input("密码:")
        if login(user, pwd):
            print("登陆成功")
        else:
            print("登陆失败")

main()

  

时间: 2024-08-08 13:42:47

22.hashlib模块的相关文章

python的hashlib模块

hashlib模块是用来对字符串进行hash加密的模块,得到的hash密文不会改变,稳定:用于注册.登录时用户名.密码等加密使用.一.函数分析:1.共有5种加密算法:md5(),sha1(),sha224(),sha256(),sha384(),sha512(),分别得到不同的加密密文.2.hashlib.hexdigest():获取加密的密文,16进制,无参数.3.hashlib.digest():获取加密的密文,二进制,无参数.4.hashlib.copy():复制一份当前创建的hash对象

python标准模块(time、datetime及hashlib模块)

一.time,datetime模块 时间相关的操作 1 import time 2 time.sleep(5) # ==> 停顿多少秒 3 print(time.time()) # ==> 返回时间戳,1970年1月1日之后的秒,seconds 4 print(time.ctime()) # ==> 返回字符串形式当前时区的当前时间 5 print(time.ctime(time.time()-86400)) # ==>时间换算,当前系统时间提前一天 6 print(time.gm

Python学习笔记——基础篇【第六周】——hashlib模块

常用模块之hashlib模块 用于加密相关的操作,3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法 import md5 hash = md5.new() hash.update('admin') print hash.hexdigest() MD5-废弃 import sha hash = sha.new() hash.update('admin') print hash.hexdigest() sha-废

python 正则,os,sys,hashlib模块

简单的小算法 random随机获取数据 import random def getrandata(num): a=[] i=0 while i<num: a.append(random.randint(0,100)) i+=1 return a print(getrandata(10)) 例: [5, 3, 38, 4, 69, 40, 94, 36, 14, 26] 冒泡排序 import getdata def bubbleSort(a): l=len(a)-2 i=0 while i<l

处理xml模块、configparser模块、hashlib模块、subprocess模块

xml模块 新建a.xml内容为: <data> <country name="Liechtenstein"> <rank updated="yes">2</rank> <year updated="yes" version="1.0">2009</year> <gdppc>141100</gdppc> <neighbor d

python - 常用模块 - hashlib模块

python3中的hashlib库主要是为大家提供了python中常用的加密方式 其中SHA1官方不再支持,不建议用.md5()的安全性不如SHA2,所以推荐使用SHA2做加密算法 hashlib里面的加密方式都是单向加密,没有反加密方式,所以在使用时,比如密码验证,在数据库里面存储的是加密后的值,再把用户输入的密码进行相同加密方式,再对比 hashlib里面主要提供 md5, sha1, sha224, sha256, sha384, sha512 算法各种加密算法在使用上,只是声明加密方式的

2018-06-27-Python全栈开发day23-logging、configparser、hashlib模块

1.logging模块 logging模块就是日志模块,用来记录程序运行的状态. 其中有五个级别: debug, info, warning, error, critical logging.debug('debug message')# logging.info('info message') logging.warning('warn message')#表明发生了一些意外,或者不久的将来会发生问题(如'磁盘满了').软件还是在正常工作. logging.error('error messa

python模块 os&amp;sys&amp;subprocess&amp;hashlib模块

os模块 # os模块可根据带不带path分为两类 # 不带path print(os.getcwd()) # 得到当前工作目录 print(os.name) # 指定你正在使用的操作系统,windows为nt,linux为“posix" os.shell() # 运行shell命令 print(os.environ) # 返回操作系统所有的环境变量 print(os.getenv("home")) # 读取指定环境变量的值 os.environ.setdefault(&qu

函数知识点 1.包 2.hashlib模块 --- 摘要算法模块 3.logging模块 4.openpyxl模块 5.深浅拷贝 # 17

函数知识点1.包 1 # coding(编码系统):utf-8 2 """ 3 1.模块的三种来源: 4 1.内置 5 2.第三方 6 3.自定义 7 2.模块的四种表现形式: 8 1. .py文件 9 2.共享文件 10 3.包 11 4.内置 12 3.研究模块和包: 13 # 还可以站在另外两个角度分析: 14 1.模块的开发者 15 2.模块的使用者 16 4.导模块的那一瞬间发生了什么? 17 首先运行执行文件run.py,创建一个run.py的名称空间 18 1.