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 version 2.7 required, which was not found in the registry
Aug 26 Python
Python获取服务器信息的最简单实现方法
Mar 05 Python
Python模拟三级菜单效果
Sep 11 Python
你真的了解Python的random模块吗?
Dec 12 Python
python发送告警邮件脚本
Sep 17 Python
Python操作Sonqube API获取检测结果并打印过程解析
Nov 27 Python
opencv python Canny边缘提取实现过程解析
Feb 03 Python
Python使用QQ邮箱发送邮件实例与QQ邮箱设置详解
Feb 18 Python
python 通过邮件控制实现远程控制电脑操作
Mar 16 Python
Python文件夹批处理操作代码实例
Jul 21 Python
python工具——Mimesis的简单使用教程
Jan 16 Python
pytorch 使用半精度模型部署的操作
May 24 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之对抗Web扫描器的脚本技巧
2008/10/01 PHP
使用zend studio for eclipse不能激活代码提示功能的解决办法
2009/10/11 PHP
解析php扩展php_curl.dll不加载的解决方法
2013/06/26 PHP
yii中widget的用法
2014/12/03 PHP
谈谈从phpinfo中能获取哪些值得注意的信息
2017/03/28 PHP
ThinkPHP框架实现的微信支付接口开发完整示例
2019/04/10 PHP
Laravel Eloquent分表方法并使用模型关联的实现
2019/11/25 PHP
用于table内容排序
2006/07/21 Javascript
javascript 对象的定义方法
2007/01/10 Javascript
javascript 闭包
2011/09/15 Javascript
js通过iframe加载外部网页的实现代码
2015/04/05 Javascript
javascript基础语法学习笔记
2016/01/04 Javascript
Javascript基础_简单比较undefined和null 值
2016/06/14 Javascript
浅析如何利用angular结合translate为项目实现国际化
2016/12/08 Javascript
解析如何利用iframe标签以及js制作时钟
2016/12/08 Javascript
React入门教程之Hello World以及环境搭建详解
2017/07/11 Javascript
浅谈React Event实现原理
2018/09/20 Javascript
Node.js assert断言原理与用法分析
2019/01/04 Javascript
element-ui中dialog弹窗关闭按钮失效的解决
2020/09/22 Javascript
微信小程序选择图片控件
2021/01/19 Javascript
python实用代码片段收集贴
2015/06/03 Python
基于python实现百度翻译功能
2019/05/09 Python
python使用Pandas库提升项目的运行速度过程详解
2019/07/12 Python
详解PyTorch手写数字识别(MNIST数据集)
2019/08/16 Python
tesserocr与pytesseract模块的使用方法解析
2019/08/30 Python
Python利用Faiss库实现ANN近邻搜索的方法详解
2020/08/03 Python
伦敦一家非常流行的时尚精品店:Oxygen Boutique
2017/01/15 全球购物
DVF官方网站:美国时装界尊尚品牌
2017/08/29 全球购物
英国领先的男装设计师服装购物网站:Mainline Menswear
2018/02/04 全球购物
如何判断一段程序是由C 编译程序还是由C++编译程序编译的
2013/08/04 面试题
Shell脚本如何向终端输出信息
2014/04/25 面试题
小学门卫岗位职责
2013/12/17 职场文书
金融管理应届生求职信
2014/02/20 职场文书
课内比教学心得体会
2014/09/09 职场文书
党员干部反四风对照检查材料思想汇报
2014/09/14 职场文书
Nginx如何限制IP访问只允许特定域名访问
2022/07/23 Servers