详解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中防止sql注入的方法详解
Feb 25 Python
tensorflow 使用flags定义命令行参数的方法
Apr 23 Python
python随机数分布random测试
Aug 27 Python
Python中is和==的区别详解
Nov 15 Python
详解python tkinter教程-事件绑定
Mar 28 Python
python调用函数、类和文件操作简单实例总结
Nov 29 Python
Pycharm中安装wordcloud等库失败问题及终端通过pip安装的Python库如何添加到Pycharm解释器中(推荐)
May 10 Python
Django的ListView超详细用法(含分页paginate)
May 21 Python
python3让print输出不换行的方法
Aug 24 Python
python实现自动打卡的示例代码
Oct 10 Python
一个非常简单好用的Python图形界面库(PysimpleGUI)
Dec 28 Python
对pytorch中x = x.view(x.size(0), -1) 的理解说明
Mar 03 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
PHP一些有意思的小区别
2006/12/06 PHP
写php分页时出现的Fatal error的解决方法
2011/04/18 PHP
PHP中通过HTTP_USER_AGENT判断是否为手机移动终端的函数代码
2013/02/14 PHP
smarty模板中拼接字符串的方法
2014/02/14 PHP
php实现的xml操作类
2016/01/15 PHP
PHP+redis实现的购物车单例类示例
2019/02/02 PHP
Yii2框架自定义类统一处理url操作示例
2019/05/25 PHP
Javascript中定义方法的另类写法(批量定义js对象的方法)
2011/02/25 Javascript
javascript nextSibling 与 getNextElement(node) 使用介绍
2011/10/13 Javascript
用js判断页面是否加载完成实现代码
2012/12/11 Javascript
javascript的原生方法获取数组中的最大(最小)值
2012/12/19 Javascript
怎么判断js脚本加载完成
2014/02/28 Javascript
jQuery插件Slider Revolution实现响应动画滑动图片切换效果
2015/06/05 Javascript
jquery 遍历数组 each 方法详解
2016/05/25 Javascript
KnockoutJS 3.X API 第四章之事件event绑定
2016/10/10 Javascript
浅谈JS中的常用选择器及属性、方法的调用
2017/07/28 Javascript
D3.js 实现带伸缩时间轴拓扑图的示例代码
2020/01/20 Javascript
jquery+css3实现的经典弹出层效果示例
2020/05/16 jQuery
[56:46]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 VP vs Effect
2018/04/01 DOTA
python利用hook技术破解https的实例代码
2013/03/25 Python
python基础教程之面向对象的一些概念
2014/08/29 Python
基于python的字节编译详解
2017/09/20 Python
对python3 一组数值的归一化处理方法详解
2018/07/11 Python
python实现杨氏矩阵查找
2019/03/02 Python
详解python polyscope库的安装和例程
2020/11/13 Python
HTML5 video 事件应用示例
2014/09/11 HTML / CSS
美国知名女性服饰品牌:New York & Company
2017/03/23 全球购物
西安当代医院管理研究院笔试题
2015/12/11 面试题
二年级体育教学反思
2014/01/15 职场文书
小学新学期寄语
2014/04/02 职场文书
授权委托书样本
2014/04/03 职场文书
人力资源职位说明书
2014/07/29 职场文书
2014年依法行政工作总结
2014/11/19 职场文书
2014年检察院个人工作总结
2014/12/09 职场文书
致运动员的广播稿
2015/08/19 职场文书
Python使用pandas导入csv文件内容的示例代码
2022/12/24 Python