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 相关文章推荐
python3处理含有中文的url方法
May 10 Python
python实现简易学生信息管理系统
Apr 05 Python
通过字符串导入 Python 模块的方法详解
Oct 27 Python
python使用pygame实现笑脸乒乓球弹珠球游戏
Nov 25 Python
matplotlib.pyplot画图并导出保存的实例
Dec 07 Python
python保留小数位的三种实现方法
Jan 07 Python
解决tensorboard多个events文件显示紊乱的问题
Feb 15 Python
浅谈ROC曲线的最佳阈值如何选取
Feb 28 Python
TensorFlow固化模型的实现操作
May 26 Python
PyTorch如何搭建一个简单的网络
Aug 24 Python
Python通过递归函数输出嵌套列表元素
Oct 15 Python
matplotlib 画动态图以及plt.ion()和plt.ioff()的使用详解
Jan 05 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操作xml代码
2010/06/17 PHP
一个简洁实用的PHP缓存类完整实例
2014/07/26 PHP
PHP代码优化技巧小结
2015/09/29 PHP
CodeIgniter钩子用法实例详解
2016/01/20 PHP
thinkphp项目部署到Linux服务器上报错“模板不存在”如何解决
2016/04/27 PHP
Yii2使用自带的UploadedFile实现的文件上传
2016/06/20 PHP
PHP文件与目录操作示例
2016/12/24 PHP
PHP创建文件及写入数据(覆盖写入,追加写入)的方法详解
2019/02/15 PHP
jquery的相对父元素和相对文档定位示例代码
2013/08/02 Javascript
jquery中event对象属性与方法小结
2013/12/18 Javascript
JS中如何设置readOnly的值
2013/12/25 Javascript
jQuery选择器源码解读(七):elementMatcher函数
2015/03/31 Javascript
js判断是否为空和typeof的用法(详解)
2016/10/07 Javascript
浅谈Angularjs link和compile的使用区别
2016/10/21 Javascript
bootstrap模态框示例代码分享
2017/05/17 Javascript
JavaScript数组push方法使用注意事项
2017/10/30 Javascript
vue实现导航栏效果(选中状态刷新不消失)
2017/12/13 Javascript
详解Next.js页面渲染的优化方案
2019/01/27 Javascript
vue中axios请求的封装实例代码
2019/03/23 Javascript
Node.js 路由的实现方法
2019/06/05 Javascript
layui 富文本赋值,取值,取纯文本值的实例
2019/09/18 Javascript
Vue修改项目启动端口号方法
2019/11/07 Javascript
微信小程序实现首页弹出广告
2020/12/03 Javascript
跟老齐学Python之玩转字符串(2)更新篇
2014/09/28 Python
Python 使用 docopt 解析json参数文件过程讲解
2019/08/13 Python
python argparser的具体使用
2019/11/10 Python
Django app配置多个数据库代码实例
2019/12/17 Python
python中使用you-get库批量在线下载bilibili视频的教程
2020/03/10 Python
详解CSS3伸缩布局盒模型Flex布局
2018/08/20 HTML / CSS
欧洲最大的婴幼儿服装及内衣公司:Petit Bateau(小帆船)
2016/08/16 全球购物
澳大利亚排名第一的狂热牛仔品牌:ONETEASPOON
2018/11/20 全球购物
利达恒信公司.NET笔试题面试题
2016/03/05 面试题
《一件运动衫》教学反思
2014/02/19 职场文书
群众路线教育党课主持词
2014/04/01 职场文书
大学生个人总结范文
2015/02/15 职场文书
幼儿园园长六一致辞
2015/07/31 职场文书