详解python中的hashlib模块的使用


Posted in Python onApril 22, 2019

hashlib

hashlib主要提供字符加密功能,将md5和sha模块整合到了一起,支持md5,sha1, sha224, sha256, sha384, sha512等算法

hashlib模块

#哈希算法也叫摘要算法,相同的数据始终得到相同的输出,不同的数据得到不同的输出。
#(1)哈希将不可变的任意长度的数据,变成具有固定长度的唯一值
#(2)字典的键值对映射关系是通过哈希计算的,哈希存储的数据是散列(无序)

# 应用场景:在需要效验功能时使用
 用户密码的 => 加密,解密
 相关效验的 => 加密,解密

hashlib中的MD5算法

# 第一步是引包
import hashlib
# 创建一个md5算法的对象
hs = hashlib.md5()
# print(hs)
# update中的 参数必须是二进制字节流 
hs.update("123".encode())
## hexdigest 返回32位十六进制的字符串(固定长度)
## 用一个hsvar来接收经过哈希算法返回的值
hsvar = hs.hexdigest()

#加盐 (就是在简单的算法中进行加入混肴参数)

语法格式如下:

#首先在实例化hashlib中的MD5对象的时候,加入混淆参数key,以此达到更加复杂的加密)

#加入的key参数一定也要是字节流
hs2 = hashlib.md5("abcd".encode())
hs2.update("123123".encode())
hs2var = hs2.hexdigest()

加盐后的好处就是,增加了加密的安全性,使其不那么容易被破解

但因为hash算法是被公开的算法,其安全性不那么好,一些简单的加密 值很容易被逆向破解出来,说逆向破解也不那么准确,

一般来说,破解此类算法只能使用穷举法, 可以将 跑出来的值存入到一个大的数据库中,哈希算法得出的值有唯一性,所以可以反向查询已有的hash值来得到原始数据,当然这种网站也有, 我百度上看到的一个网站,你们可以进去看一看,一般的哈希值都能查询到原数据,只要他们数据库中有的话.

所以说最好的方法就是我们要加盐,去加入复杂混肴参数,这样的话大大提高了数据加密的安全性

链接: https://www.cmd5.com/  md5解密(本链接只作为学习使用,勿将其使用到任何非法用途)

在开发编程中,常用到hash算法的方面应该有用户的注册登录

下面有我写的一个实例,供大家参考(为了方便大家的阅读,这个注册登录功能我没有完善,比如说用正则去卡用户名和密码的格式等等,)

import hashlib
#定义一个加密函数,将传入的参数转换成32位的哈希值并返回
def md5(pwd):
  md5_password = hashlib.md5("abd".encode())
  md5_password.update(pwd.encode())
  return md5_password.hexdigest()
#定义一个登录函数,将传入的账号密码与本地密码文件进行匹配,如果匹配到返回True
def login(user,pwd):
  with open("database","r",encoding="utf-8") as fp:
    for line in fp :
      u,p = line.strip().split("|")
      if u == user and p == md5(pwd):
        return True
#定义一个注册的函数,将用户传入的账号密码写入到本地的密码文件中
def register(user,pwd):
  with open("database","w",encoding="utf-8") as fp:
    temp = user+ "|" + md5(pwd)
    fp.write(temp)
#index菜单,给用户的交互
choice = input("1表示登录, 2表示注册:").strip()
if choice == "2":
  user = input("用户名:")
  pwd = input("密码:")
  register(user,pwd)
elif choice == "1":
  user = input("用户名:")
  pwd = input("密码:")
  r = login(user,pwd)
  if r == True:
    print("登录成功")
  else:
    print("登录失败")
else:
  print("账号不存在")

 hashlib中的sha算法

•# sha 加密效率低,算法精密,安全性高
•sha: Secure Hash Algorithm(安全哈希算法)

 sha是美国国家标准与技术研究院与美国国家安全局设计,从94年以来被广泛使用的加密算法.sha系列中的sha1, sha224, sha2556适用于长度不超过2^64二进制位的消息。sha384和sha512适用于长度不超过2^128二进制位的消息。不过,这个也不太安全.2005年的时候国内王小云教授及其团队在sha1算法的破译上就已经取得了很大的成就.今年谷歌已经攻破了sha1算法.另外,Matthew Green(https://twitter.com/matthew_d_green)在这一领域也有不错的成就.

import hashlib
#实例化sha1对象
hs3 = hashlib.sha1()
#去将要去加密的数据通过一个方法放入对象中
hs3.update('123123'.encode())
#调用对象中的方法,计算并输出加密后的40位的哈希值
hsvar = hs3.hexdigest()

sha算法常用的有 sha1 sha512等,语法一样,只不过输出的哈希值的长度不一样,所以就不一一列举了

总结

以上所述是小编给大家介绍的python中的hashlib模块的使用,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
python回溯法实现数组全排列输出实例分析
Mar 17 Python
Python批量按比例缩小图片脚本分享
May 21 Python
Python爬虫模拟登录带验证码网站
Jan 22 Python
python编写微信远程控制电脑的程序
Jan 05 Python
Python中enumerate()函数编写更Pythonic的循环
Mar 06 Python
磁盘垃圾文件清理器python代码实现
Aug 24 Python
PyCharm的设置方法和第一个Python程序的建立
Jan 16 Python
解析python实现Lasso回归
Sep 11 Python
python爬虫爬取笔趣网小说网站过程图解
Nov 18 Python
解决Jupyter notebook更换主题工具栏被隐藏及添加目录生成插件问题
Apr 20 Python
Python转换字典成为对象,可以用"."方式访问对象属性实例
May 11 Python
python+selenium+chrome实现淘宝购物车秒杀自动结算
Jan 07 Python
Python 中包/模块的 `import` 操作代码
Apr 22 #Python
python定时检测无响应进程并重启的实例代码
Apr 22 #Python
django query模块
Apr 20 #Python
不到20行代码用Python做一个智能聊天机器人
Apr 19 #Python
详解Python3 基本数据类型
Apr 19 #Python
python面向对象法实现图书管理系统
Apr 19 #Python
python远程连接MySQL数据库
Apr 19 #Python
You might like
PHP4 与 MySQL 交互使用
2006/10/09 PHP
详解js异步文件加载器
2016/01/24 PHP
php抽奖概率算法(刮刮卡,大转盘)
2020/04/17 PHP
详谈PHP中public,private,protected,abstract等关键字的用法
2017/12/31 PHP
Javascript优化技巧(文件瘦身篇)
2008/01/28 Javascript
网页前台通过js非法字符过滤代码(骂人的话等等)
2010/05/26 Javascript
jQuery '行 4954 错误: 不支持该属性或方法' 的问题解决方法
2011/01/19 Javascript
JavaScript中的null和undefined解析
2012/04/14 Javascript
滚动条响应鼠标滑轮事件实现上下滚动的js代码
2014/06/30 Javascript
JavaScript返回0-1之间随机数的方法
2015/04/06 Javascript
需灵活掌握的Bootstrap预定义排版类 你精通吗?
2016/06/20 Javascript
JavaScript随机打乱数组顺序之随机洗牌算法
2016/08/02 Javascript
利用jquery实现瀑布流3种案例
2016/09/18 Javascript
使用jQuery ajaxupload插件实现无刷新上传文件
2017/04/23 jQuery
windows下更新npm和node的方法
2017/11/30 Javascript
Vue实战教程之仿肯德基宅急送App
2019/07/19 Javascript
Vue自定义多选组件使用详解
2020/09/08 Javascript
python中的__slots__使用示例
2015/02/26 Python
Python实现微信公众平台自定义菜单实例
2015/03/20 Python
WINDOWS 同时安装 python2 python3 后 pip 错误的解决方法
2017/03/16 Python
Python2.X/Python3.X中urllib库区别讲解
2017/12/19 Python
Python实现的在特定目录下导入模块功能分析
2019/02/11 Python
python基于递归解决背包问题详解
2019/07/03 Python
Python魔法方法 容器部方法详解
2020/01/02 Python
使用sklearn对多分类的每个类别进行指标评价操作
2020/06/11 Python
施华洛世奇澳大利亚官网:SWAROVSKI澳大利亚
2017/01/06 全球购物
加拿大专业美发产品购物网站:Chatters
2021/02/28 全球购物
什么是用户模式(User Mode)与内核模式(Kernel Mode) ?
2014/07/21 面试题
工商管理本科毕业生求职信范文
2013/10/05 职场文书
中专自我鉴定范文
2013/10/16 职场文书
上班看电影检讨书
2014/02/12 职场文书
《浅水洼里的小鱼》听课反思
2014/02/28 职场文书
校园主题婚礼活动策划方案
2014/09/15 职场文书
酒店管理专业毕业生自我鉴定
2014/09/29 职场文书
电力安全学习心得体会
2016/01/18 职场文书
python获取字符串中的email
2022/03/31 Python