首先我们要明白日常的Web网页为了保证数据的安全都会对数据的存储进行一些加密,当我需要在此网站验证时就需要对原有的密码以及账号进行加密此时我们就需要用到hashlib这个框架的一些功能,下面我就来更大家介绍一下hashlib的基本用法

hashlib只能加密不能反解,只要有足够的密码串转换成hashlib的字符串就有可能实现密码的破解

首先我们要导入hashlib包

# ### hashlib 模块
import hashlib
import random # 基本用法
# (1)创建一个md5算法的对象
hs = hashlib.md5()
# (2)把要加密的字符串通过update更新到hs这个对象当中进行运算
"""数据类型需要:二进制字节流"""
hs.update("abcdwW123^".encode("utf-8"))
# (3)返回32位16进制的字符串
res = hs.hexdigest()
print(res,type(res),len(res))

首先常用的实例化hashlib下的md5的类

其次将数据传入update这个方法中此时update里面的数据类型必须是2进制的字节流

当我把参数传入update这个方法之后我们就需要通过hs对象中的另外一个方法进行转换后的调用

hs.hexdigest()此时生成的值就是32位的字符串此时我们已经得到了初始随机的32位字符串

hashlib进阶
何为hashlib的进阶呢?在Web网站的验证中普通的hashlib加密由于密码太简单了所以在服务端会自动对客户端输入进来的密码进行字符串拼接后加密,之后再把数据库的32位字符串取出在进行对比,如果两者对比成功则代表密码验证成功
以下就是常用的hashlib进阶加密的一种操作
# 加盐 (加key => wW123#)
# 目的:是用户的密码变得复杂,不容易破解
# 参数是二进制字节流
hs = hashlib.md5("wW123#".encode())
hs.update("abcd".encode())
res = hs.hexdigest()
print(res,type(res),len(res)) # 动态加盐
res = str(random.randrange(100000,1000000))
hs = hashlib.md5(res.encode())
hs.update("abcd".encode())
res = hs.hexdigest()
print(res)
动态加盐(key)的方式需要记住的是需要在数据库保存随机的动态字符串以备下一次的密码验证时可以取到关键的的盐(key) hashlib下的sha系列
hashlib下的sha系列所具有的的功能与md5的功能是一样的但速度稍慢,安全性稍微好一点依然需要加盐(key)
以下是sha系列的基本用法
hs = hashlib.sha1()
hs.update("abcd".encode())
res = hs.hexdigest()
print(res , len(res) , type(res)) hs = hashlib.sha512()
hs.update("abcd".encode())
res = hs.hexdigest()
print(res , len(res) , type(res))

基本用法与MD5是一致的

加密扩展hmac系列

相对于hashlib系列下的MD5以及啥系列来说安全性更高,字符串更加难破解

用法为

hmac.new(key,msg)---》key即就是需要增加的盐(key),msg即是所要加密的字符串

以下是hmac的基本用法

# ### hmac
import hmac
"""
hmac 也是加密算法,相对来说,字符串更难破解
""" key = b""
msg = b"abcd"
hm = hmac.new(key,msg)
res = hm.hexdigest()
print(res,len(res)) # 动态加盐
import os
"""urandom 随机返回具有固定长度的二进制字节流 参数:字节流的长度"""
res = os.urandom(32)
print(res,len(res)) key = os.urandom(32)
msg = b"abcd"
hm = hmac.new(key,msg)
res = hm.hexdigest()
print(res)




 

hashlib以及hmac的日常应用的更多相关文章

  1. python 内置模块之hashlib、hmac、uuid

    一.hashlib md5和sha算法通过消息摘要算法生成定长的消息摘要,消息摘要算法是不可逆的.但同一段消息通过摘要算法后得到的值是一样的,可一通过比对消息摘要验证数据的完整性. sha算法比MD5 ...

  2. Python hashlib and hmac

    hashlib hashlib提供了常用的摘要算法:MD5, SHA1等等 摘要算法:也成哈希算法,散列算法.通过一个函数把任意长度的数据转换成一个长度固定的数据串.主要用在存储一些不能被修改和查看的 ...

  3. Python之数据加密与解密及相关操作(hashlib、hmac、random、base64、pycrypto)

    本文内容 数据加密概述 Python中实现数据加密的模块简介 hashlib与hmac模块介绍 random与secrets模块介绍 base64模块介绍 pycrypto模块介绍 总结 参考文档 提 ...

  4. hashlib(hmac)进阶之client跟server交互

    首先我还是要强调不管任何相同的字符串通过hashlib加密之后都会产生相同的32位字符串,这个是日常Web中常用的加密算法如果我的client发送一个请求过来我server接受到后就要对该密码进行判断 ...

  5. hashlib 和 hmac

    import hashlib hash = hashlib.md5([bytes('SALT_STRING', encoding='utf-8’)]) #SALT_STRING :加盐 hash.up ...

  6. hash模块 hashlib 和hmac

    hashlib模块 用于加密相关的操作,代替md5模块和sha模块,主要提供SHA1,SHA224,SSHA256,SHA384,SHA512,MD5算法 直接看代码案例: ---------md5- ...

  7. python hashlib、hmac模块

    一.hashlib模块 import hashlib m = hashlib.md5() m.update(b"Hello") print(m.hexdigest()) m.upd ...

  8. day20 hashlib、hmac、subprocess、configparser模块

    hashlib模块:加密 import hashlib# 基本使用cipher = hashlib.md5('需要加密的数据的二进制形式'.encode('utf-8'))print(cipher.h ...

  9. hashlib 和 hmac 算法的区别

    -----md5 = hashlib.md5() md5.update(password+salt) md5.hexdigest() ----- h = hmac.new(key,password,d ...

随机推荐

  1. 删除带外键的表【foreign key constraint fails】报错

    title: 删除带外键的表[foreign key constraint fails]报错 date: 2018-08-02 21:59:06 tags: 数据库 --- 遥想当时正在学hibern ...

  2. Python__new__方法、定制属性访问、描述符与装饰器

    __new__方法的运行顺序 装饰器的概念的用法 三个内置装饰器 类中属性的访问过程 __new__方法 创建实例的方法 __new__方法是在类创建实例的时候自动调用的 实例是通过类里面的__new ...

  3. Java 种15种锁的介绍:公平锁,可重入锁,独享锁,互斥锁等等…

    Java 中15种锁的介绍 1,在读很多并发文章中,会提及各种各样的锁,如公平锁,乐观锁,下面是对各种锁的总结归纳: 公平锁/非公平锁 可重入锁/不可重入锁 独享锁/共享锁 互斥锁/读写锁 乐观锁/悲 ...

  4. vue调用高德地图:vue-amap

    前言:之前没有接触过页面调用地图的项目,某次面试,老板要求我用vue-amap调用高德地图,回家以后,我去网上查了一些案例和教程,看似很简单的引入调用,我却整整弄了一宿,还没弄出来!!!百般无奈之下, ...

  5. luoguP4404缓存交换

    https://www.luogu.org/problem/P4404 题意 你有一个大小为n的缓存区,有个长度为m的查询序列. 每次查询的时候需要把查询值放入缓存,若缓存已满,则先删除任一位置再将其 ...

  6. luoguP3292 [SCOI2016]幸运数字(点分治做法)

    题意 考虑点分治,每次处理过重心的询问(即两点在重心的不同子树中). 求出每个点到重心的线性基,之后对过重心的询问合并两点线性基求解. code: #include<bits/stdc++.h& ...

  7. C++ string push_back()

    函数功能: 在后面添加一项 vector头文件的push_back函数,在vector类中作用为在vector尾部加入一个数据.string中的push_back函数,作用是字符串之后插入一个字符. ...

  8. 第十 构建Web内容的技术

    第十章 构建Web内容的技术 一.HTML HTML(HyperText Markup Language,超文本标记语言)是为了发送Web 上的超文本(Hypertext)而开发的标记语言.超文本是一 ...

  9. lincense更新失败

    用户的证书到期,页面无法访问, 1 #/dashboard/systemindex在这里面上传证书文件,一分钟后会恢复正常 2 在后台直接配置license字段,将license文件的内容直接拷贝过去 ...

  10. oracle存储过程中拼接字符串及转义逗号

     在ORACLE中,单引号有两个作用,一是字符串是由单引号引用,二是转义.单引号的使用是就近配对,即就近原则.而在单引号充当转义角色时相对不好理解     1.从第二个单引号开始被视为转义符,如果第二 ...