Python中摘要算法MD5,SHA1简介及应用实例代码


Posted in Python onJanuary 09, 2018

关于算法的学习,小编觉得编程语言中的算法大都有一些相通的地方,主要的方面一是了解这一算法能用来干什么,另一方面,学习它在这类编程语言中怎么实现。

摘要算法又称哈希算法、散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)。摘要算法就是通过摘要函数f()对任意长度的数据data计算出固定长度的摘要digest,目的是为了发现原始数据是否被人篡改过(不同的data计算出来的摘要不同)。

常见的摘要算法有MD5和SHA1

MD5

import hashlib
m=hashlib.md5()
m.update('zhangkang')
print(m.hexdigest())
输出:
09b32682a49db34d3c9d7e6d97f85a4a

如果数据太长,可以多次调用update(),结果是一样的

import hashlib
m=hashlib.md5()
m.update('zhang')
m.update('kang') #输出结果一样
print(m.hexdigest())

输出:
09b32682a49db34d3c9d7e6d97f85a4a

假如我们改变原始数据中的一个字母看看计算的MD5值是否完全不同

import hashlib
m=hashlib.md5()
m.update('zhangkanf')#输出结果完全不一样,虽然只改变一个字母
print(m.hexdigest())

输出:
17d2bcf39906311768c2f363778d2801

MD5是最常见的摘要算法,速度很快,生成结果是固定的128 bit字节,通常用一个32位的16进制字符串表示。

SHA1

import hashlib
s=hashlib.sha1()
s.update('my name is zhangkang')
print(s.hexdigest())

输出:
512e877d47cd06246b24ac99027991cbfa67aec1

和MD5类似,同样支持分块多次update(),只是输出结果有些区别。SHA1的结果是160 bit字节,通常用一个40位的16进制字符串表示。

摘要算法应用

假如我们有一个网站,数据库中保存着用户名和密码等信息,假设数据库中的用户密码都是明文,那么一旦数据库泄露,那么所有用户的密码就会显而易见。这样有可能导致用户的信息泄露,而正确保存用户密码的方式是不保存明文密码,而是保存密码的MD5值。当用户登录的时候,先计算密码的MD5值,然后再和数据库中的比较。有人可能会问,如果密码的MD5值泄露了呢?这个没关系,因为计算数据的MD5值很方便,但是由MD5值反推原始数据基本不可能。为了更加安全的保护用户的密码信息,在计算密码的MD5值的时候,建议连同用户名,密码,或者其他固定字符串都一并update(),也就是俗称的”加盐”。

#模拟用户登录
import hashlib
db={
'zhangkang':'25c25c67943e82a116ec8c32218a5068',
}
#明文密码是:zhangkang123456
def login(username,password):
  m=hashlib.md5()
  m.update(username+password+'the-salt')
  passwd=m.hexdigest()
  if passwd!=db[username]:
    return False
  else:return True
while(True):
  username=raw_input('Input username:')
  password=raw_input('Input password:')
  if(login(username,password)):
    print('login success!')
    break
  else:
    print('login failed!')

总结

以上就是本文关于Python中摘要算法MD5,SHA1简介及应用实例代码的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

Python 相关文章推荐
Python socket C/S结构的聊天室应用实现
Nov 30 Python
Python中使用第三方库xlrd来读取Excel示例
Apr 05 Python
python使用urllib2提交http post请求的方法
May 26 Python
python中ASCII码和字符的转换方法
Jul 09 Python
Python实用技巧之利用元组代替字典并为元组元素命名
Jul 11 Python
Python+OpenCV+pyQt5录制双目摄像头视频的实例
Jun 28 Python
Python+OpenCV实现旋转文本校正方式
Jan 09 Python
如何打包Python Web项目实现免安装一键启动的方法
May 21 Python
Python操作CSV格式文件的方法大全
Jul 15 Python
PO模式在selenium自动化测试框架的优势
Mar 20 Python
Python之Matplotlib绘制热力图和面积图
Apr 13 Python
Python docx库删除复制paragraph及行高设置图片插入示例
Jul 23 Python
深入了解Python中pop和remove的使用方法
Jan 09 #Python
Python使用smtp和pop简单收发邮件完整实例
Jan 09 #Python
Numpy中stack(),hstack(),vstack()函数用法介绍及实例
Jan 09 #Python
详解python使用Nginx和uWSGI来运行Python应用
Jan 09 #Python
Python numpy实现数组合并实例(vstack,hstack)
Jan 09 #Python
运动检测ViBe算法python实现代码
Jan 09 #Python
python+opencv实现动态物体识别
Jan 09 #Python
You might like
PHP输出时间差函数代码
2013/01/28 PHP
php反射应用示例
2014/02/25 PHP
PHP不用递归遍历目录下所有文件的代码
2014/07/04 PHP
PHP中读取照片exif信息的方法
2014/08/20 PHP
php实现姓名根据首字母排序的类与方法(实例代码)
2018/05/16 PHP
js字符编码函数区别分析
2011/12/28 Javascript
jquery插件珍藏(图片局部放大/信息提示框)
2013/01/08 Javascript
通过js为元素添加多项样式,浏览器全兼容写法
2014/08/30 Javascript
基于jquery实现等比缩放图片
2014/12/03 Javascript
基于JavaScript实现瀑布流效果(循环渐近)
2016/01/27 Javascript
Bootstrap如何创建表单
2016/10/21 Javascript
jQuery模拟实现的select点击选择效果【附demo源码下载】
2016/11/09 Javascript
微信小程序购物商城系统开发系列-目录结构介绍
2016/11/21 Javascript
JavaScript切换搜索引擎的导航网页搜索框实例代码
2017/06/11 Javascript
vue mounted组件的使用
2018/06/18 Javascript
原生JS封装_new函数实现new关键字的功能
2018/08/12 Javascript
微信小程序 腾讯地图SDK 获取当前地址实现解析
2019/08/12 Javascript
Java Varargs 可变参数用法详解
2020/01/28 Javascript
[01:05:24]Ti4 冒泡赛第二天 iG vs NEWBEE 3
2014/07/15 DOTA
[07:55]2014DOTA2 TI正赛第三日 VG上演推进荣耀DKEG告别
2014/07/21 DOTA
[42:25]EG vs Spirit Supermajor 败者组 BO3 第二场 6.4
2018/06/05 DOTA
Python中isnumeric()方法的使用简介
2015/05/19 Python
Python2.7下安装Scrapy框架步骤教程
2017/12/22 Python
为什么选择python编程语言入门黑客攻防 给你几个理由!
2018/02/02 Python
Python实现基于KNN算法的笔迹识别功能详解
2018/07/09 Python
python 读取文本文件的行数据,文件.splitlines()的方法
2018/07/12 Python
Python绘图Matplotlib之坐标轴及刻度总结
2019/06/28 Python
Python通过yagmail实现发送邮件代码解析
2020/10/27 Python
CSS3 选择器 基本选择器介绍
2012/01/21 HTML / CSS
Ibatis中如何提高SQL Map的性能
2013/05/11 面试题
餐厅楼面主管岗位职责范本
2014/02/16 职场文书
《寓言两则》教学反思
2014/02/27 职场文书
2014年采购工作总结
2014/11/20 职场文书
小学运动会通讯稿
2015/07/18 职场文书
python实现简单反弹球游戏
2021/04/12 Python
python实现会员管理系统
2022/03/18 Python