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 相关文章推荐
Pthon批量处理将pdb文件生成dssp文件
Jun 21 Python
Python中 Lambda表达式全面解析
Nov 28 Python
浅谈Python2.6和Python3.0中八进制数字表示的区别
Apr 28 Python
Python实现简单文本字符串处理的方法
Jan 22 Python
TensorFlow模型保存和提取的方法
Mar 08 Python
Linux下多个Python版本安装教程
Aug 15 Python
python实现将汉字保存成文本的方法
Nov 16 Python
Django2.1集成xadmin管理后台所遇到的错误集锦(填坑)
Dec 20 Python
python 将有序数组转换为二叉树的方法
Mar 26 Python
详解Python中的测试工具
Jun 09 Python
PyCharm搭建Spark开发环境实现第一个pyspark程序
Jun 13 Python
python之基数排序的实现
Jul 26 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
一个用于MySQL的PHP XML类
2006/10/09 PHP
php中随机显示图片的函数代码
2011/06/23 PHP
PHP笔记之:日期函数的使用介绍
2013/04/24 PHP
PHP 利用Mail_MimeDecode类提取邮件信息示例
2014/01/26 PHP
Yii CGridView用法实例详解
2016/07/12 PHP
完美利用Yii2微信后台开发的系列总结
2016/07/18 PHP
精心挑选的15个jQuery下拉菜单制作教程
2012/06/15 Javascript
你必须知道的Javascript知识点之"深入理解作用域链"的介绍
2013/04/23 Javascript
Javascript中判断变量是数组还是对象(array还是object)
2013/08/14 Javascript
js对象转json数组的简单实现案例
2014/02/28 Javascript
js中的内部属性与delete操作符介绍
2015/08/10 Javascript
点评js异步加载的4种方式
2015/12/22 Javascript
js CSS3实现卡牌旋转切换效果
2017/07/04 Javascript
node通过express搭建自己的服务器
2017/09/30 Javascript
Babel 入门教程学习笔记
2018/06/13 Javascript
详解如何解决Vue和vue-template-compiler版本之间的问题
2018/09/17 Javascript
jQuery实现checkbox全选、反选及删除等操作的方法详解
2019/08/02 jQuery
vue中使用elementUI组件手动上传图片功能
2019/12/13 Javascript
如何区分vue中的v-show 与 v-if
2020/09/08 Javascript
VUE 项目在IE11白屏报错 SCRIPT1002: 语法错误的解决
2020/09/27 Javascript
python使用rsa加密算法模块模拟新浪微博登录
2014/01/22 Python
在Python中使用Mako模版库的简单教程
2015/04/08 Python
python xlsxwriter创建excel图表的方法
2018/06/11 Python
python selenium自动上传有赞单号的操作方法
2018/07/05 Python
Python 实现交换矩阵的行示例
2019/06/26 Python
python 实现保存最新的三份文件,其余的都删掉
2019/12/22 Python
css3实现信纸/同学录效果的示例代码
2018/12/11 HTML / CSS
耐克巴西官方网站:Nike巴西
2016/08/14 全球购物
最新会计专业求职信范文
2014/01/28 职场文书
《桥》教学反思
2014/04/09 职场文书
老公保证书范文
2014/04/29 职场文书
社区志愿者活动方案
2014/08/18 职场文书
2014年最新大专生职业生涯规划书范文
2014/09/13 职场文书
小学科学教学计划
2015/01/21 职场文书
2015年监理个人工作总结
2015/05/23 职场文书
医院病假条范文
2015/08/17 职场文书