hashlib模块

一、hashlib模块
hashlib模块,主要用于加密相关的操作,在python3的版本里,代替了md5和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法
import hashlib #导入模块
######## md5 ###########
m = hashlib.md5() #创建一个对象
m.update(b"hhf") #加密字符串 b代表byte,是把字符串转换成byte类型,也可以用bytes()强制转换
#m.update(bytes("hhf",encoding='utf-8')) #不指定encoding会报错,TypeError: Unicode-objects must be encoded before hashing
#bytes() 强制转换为字节类型
print(m.digest()) #取加密后字符串 转换成2进制格式hash
print(m.hexdigest()) #16进制格式hash,比较常用 ###########-sha1 ########
hash = hashlib.sha1()
hash.update(b'admin')
print(hash.hexdigest()) # # ######## sha256 ########
hash = hashlib.sha256()
hash.update(b'admin')
print(hash.hexdigest()) # # ######## sha384 ########
hash = hashlib.sha384()
hash.update(b'admin')
print(hash.hexdigest()) # # ######## sha512 ########
hash = hashlib.sha512()
hash.update(b'admin')
print(hash.hexdigest()) #以上的加密方法都无法解密

例子

import hashlib

hash = hashlib.md5()#md5对象,md5不能反解,但是加密是固定的,就是关系是一一对应,所以有缺陷,可以被对撞出来
hash.update(bytes('admin',encoding='utf-8'))#要对哪个字符串进行加密,就放这里
print(hash.hexdigest())#拿到加密字符串
# hash2=hashlib.sha384()#不同算法,hashlib很多加密算法
# hash2.update(bytes('admin',encoding='utf-8'))
# print(hash.hexdigest()) hash3 = hashlib.md5(bytes('abd',encoding='utf-8'))
''' 如果没有参数,所以md5遵守一个规则,生成同一个对应关系,如果加了参数,
就是在原先加密的基础上再加密一层,这样的话参数只有自己知道,防止被撞库,
因为别人永远拿不到这个参数
'''
hash3.update(bytes('admin',encoding='utf-8'))
print(hash3.hexdigest()) #输出 96270535571b70a9c42cedda1851d57c
827a2329d20080baa7f53bdfc7031425

这里写一个利用md5进行用户登陆网站进行注册之后密码加密的基本事例,加深理解

#hashlib简单使用
def md5(arg):#这是加密函数,将传进来的函数加密
md5_pwd = hashlib.md5(bytes('abd',encoding='utf-8'))
md5_pwd.update(bytes(arg,encoding='utf-8'))
return md5_pwd.hexdigest()#返回加密的数据
def log(user,pwd):#登陆时候时候的函数,由于md5不能反解,因此登陆的时候用正解
with open('db','r',encoding='utf-8') as f:
for line in f:
u,p=line.strip().split('|')
if u ==user and p == md5(pwd):#登陆的时候验证用户名以及加密的密码跟之前保存的是否一样
return True
def register(user,pwd):#注册的时候把用户名和加密的密码写进文件,保存起来
with open('db','a',encoding='utf-8') as f:
temp = user+'|'+md5(pwd)
f.write(temp) i=input('1表示登陆,2表示注册:')
if i=='2':
user = input('用户名:')
pwd =input('密码:')
register(user,pwd)
elif i=='1':
user = user = input('用户名:')
pwd =input('密码:')
r=log(user,pwd)#验证用户名和密码
if r ==True:
print('登陆成功')
else:
print('登陆失败')
else:
print('账号不存在')

最新文章

  1. .htaccess 基础教程(三)RewriteCond标志符,RewriteRule适用的标志符
  2. vim 标签命令
  3. 使用Burpsuite抓取手机APP的HTTPS数据
  4. JavaScript函数后面加不加括号的区别
  5. SpringMVC学习--数据回显
  6. 安装scapy遇到的问题
  7. SQL Server事务的隔离级别
  8. nodejs对静态文件目录的处理
  9. Andoid 学习笔记 AppCompatEditText
  10. PHP对表单提交特殊字符的过滤和处理
  11. iOS 视图控制器生命周期
  12. 自己写的日志框架--linkinLog4j--日志框架的必要性
  13. 如何使用mysqldump备份数据库
  14. spring事务的传播机制新解
  15. 主机-配件-接口-整机-3c-1
  16. Daily Scrum NO.8
  17. CF961F k-substrings
  18. 七:HDFS Permissions Guide 权限
  19. leetcode笔记(七)529. Minesweeper
  20. OpenCV中的SURF算法介绍

热门文章

  1. 指令重排序 as-if-serial
  2. Eclipse导入外部jar包的步骤
  3. springcloud学习(一)之Eureka
  4. java实现发送短信验证码
  5. Second_week_mofangzhen
  6. d3 zoom 抖动问题 事件
  7. 一文读懂 SuperEdge 边缘容器架构与原理
  8. 【C++】《C++ Primer 》第十章
  9. 在Windows中安装MongoDB--图文并茂
  10. C/C++内存对齐详解