Python hashlib模块用法实例分析


Posted in Python onJune 12, 2018

本文实例讲述了Python hashlib模块用法。分享给大家供大家参考,具体如下:

一、hashlib基本使用

python中的hashlib模块用来进行hash或者md5加密,而且这种加密是不可逆的,所以这种算法又被称为摘要算法。其支持Openssl库提供的所有算法,包括md5、sha1、sha224、sha256、sha512等。

常用的属性和方法:

algorithms:列出所有加密算法('md5','sha1','sha224','sha256','sha384','sha512')
digesti_size:产生的散列的字节大小
md5()/sha1():创建一个md5或者sha1加密模式的hash对象
update(arg):用字符串参数来更新hash对象,如果同一个has对象重复调用该方法,如下:m.update(a); m.update(b),则等于m.update(a+b)
digest():返回摘要,作为二进制数据字符串值
hexdigest():返回摘要,作为十六进制数据字符串值
copy():复制

下面是一个简单的加密示例:

import hashlib
m = hashlib.md5()
m.update('how to use md5'.encode('utf-8'))
m.update('in python hashlib'.encode('utf-8'))
print m.hexdigest()

返回值如下:

9f97604918a2e86bfcc4aea5c35a4c8b

下面一个示例用于计算文件md5值:

#!/usr/bin/env python
#coding: utf-8
import hashlib
import sys
def main():
  if len(sys.argv) != 2:
    sys.exit('Usage: %s file' % sys.argv[0])
  filename = sys.argv[1]
  m = hashlib.md5()
  with open(filename, 'rb') as fp:
    while True:
      blk = fp.read(4096) # 每次读取4kb
      if not blk: break
      m.update(blk)
  print m.hexdigest(), filename
if __name__ == '__main__':
  main()

二、hashlib的应用场景

摘要算法通常应用于网站存储用户的帐号密码相关信息。默认情况下,我们插入到数据库的帐号密码都是以明文保存。这样的话,一旦数据库泄露,所有用户的口令都会直接泄露,而且明文保存,网站管理员也可以直接查看到用户口令,这样及不安全。所以我们可以在获取到用户输入的密码以后,直接对其进行加密处理。然后将加密的字符串存入数据库。这样当下次用户登录时,再对用户输入的密码进行加密处理,然后与数据库中存储的加密字串进行比对,如果匹配,则说明密码正确。

当然上述方法比明文存储密码确实要安全不少。但在有些场景中,用户通常会将密码设置的尤为简单。这样如果数据库泄露,黑客可以通过简单的密码尝试来完成对加密字串的匹配。为了解决这种方法,我们通常需要对密码做“加盐”处理。如下:

def get_md5(password):
  m = hashlib.md5()
  m.update(password)
  return m.hexdigest()
def calc_md5(password):
  return get_md5(password + 'the-Salt')
db = {}
def register(username,password):
  db[username] = username
  db[password] = calc_md5(password)

这样,只要'the-Salt'部分不被泄露,就没办法反推用户的简单密码。

但是这样仍然有个问题,那就是多个用户的密码可能重复,这样,在数据库里就会出现相同的加密字串。我们知道通常而言,用户的用户名肯定不会相同。我们再假设用户的用户名不会改变。我们可以使用用户的用户名来做加盐处理,如下:

def clc_md5(username,password):
  return get_md5(passwd + username + 'the-Salt')
Python 相关文章推荐
Python深入学习之闭包
Aug 31 Python
在Django框架中运行Python应用全攻略
Jul 17 Python
Python生成器以及应用实例解析
Feb 08 Python
一条命令解决mac版本python IDLE不能输入中文问题
May 15 Python
python删除字符串中指定字符的方法
Aug 13 Python
python函数与方法的区别总结
Jun 23 Python
python写入文件自动换行问题的方法
Jul 05 Python
用Python实现BP神经网络(附代码)
Jul 10 Python
python实现图片插入文字
Nov 26 Python
pyecharts绘制中国2020肺炎疫情地图的实例代码
Feb 12 Python
python如何实现读取并显示图片(不需要图形界面)
Jul 08 Python
实操Python爬取觅知网素材图片示例
Nov 27 Python
python中itertools模块zip_longest函数详解
Jun 12 #Python
Python subprocess模块常见用法分析
Jun 12 #Python
python 基本数据类型占用内存空间大小的实例
Jun 12 #Python
Python中.join()和os.path.join()两个函数的用法详解
Jun 11 #Python
使用Python进行QQ批量登录的实例代码
Jun 11 #Python
python中使用psutil查看内存占用的情况
Jun 11 #Python
Python运维之获取系统CPU信息的实现方法
Jun 11 #Python
You might like
php用户密码加密算法分析【Discuz加密算法】
2016/10/12 PHP
javascript 同时在IE和FireFox获取KeyCode的代码
2010/02/07 Javascript
js 点击按钮弹出另一页,选择值后,返回到当前页
2010/05/26 Javascript
js Function类型
2011/12/04 Javascript
jQuery 顶部导航跟随滚动条滚动固定浮动在顶部
2014/06/06 Javascript
jquery实现具有嵌套功能的选项卡
2016/02/12 Javascript
jQuery内容折叠效果插件用法实例分析(附demo源码)
2016/04/28 Javascript
JavaScript_ECMA5数组新特性详解
2016/06/12 Javascript
JS随机打乱数组的方法小结
2016/06/22 Javascript
vue.js  父向子组件传参的实例代码
2017/10/29 Javascript
JavaScript数组push方法使用注意事项
2017/10/30 Javascript
bootstrap响应式工具使用详解
2017/11/29 Javascript
vue2.0实现前端星星评分功能组件实例代码
2018/02/12 Javascript
JavaScript去掉数组重复项的方法分析【测试可用】
2018/07/19 Javascript
bootstrap 路径导航 分页 进度条的实例代码
2018/08/06 Javascript
详解Vue改变数组中对象的属性不重新渲染View的解决方案
2018/09/21 Javascript
使用weixin-java-miniapp配置进行单个小程序的配置详解
2019/03/29 Javascript
Nuxt.js实战和配置详解
2019/08/05 Javascript
Vue页面切换和a链接的本质区别详解
2019/11/12 Javascript
JS如何实现动态添加的元素绑定事件
2019/11/12 Javascript
[00:52]DOTA2第二届亚洲邀请赛预选赛宣传片
2017/01/13 DOTA
[51:36]Optic vs Newbee 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
浅析Python中MySQLdb的事务处理功能
2016/09/21 Python
Python实现的三层BP神经网络算法示例
2018/02/07 Python
python列表生成式与列表生成器的使用
2018/02/23 Python
Python错误处理操作示例
2018/07/18 Python
IronPython连接MySQL的方法步骤
2019/12/27 Python
详解python中的异常和文件读写
2021/01/03 Python
django inspectdb 操作已有数据库数据的使用步骤
2021/02/07 Python
软件测试有哪些?什么是配置项?
2012/02/12 面试题
Ruby如何创建一个线程
2013/03/10 面试题
工厂总经理岗位职责
2014/02/07 职场文书
最新奶茶店创业计划书范文
2014/02/08 职场文书
财务管理专业自荐书
2014/09/02 职场文书
2015年暑假工作总结
2015/07/13 职场文书
2016新年致辞
2015/08/01 职场文书