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创建对称矩阵的方法示例【基于numpy模块】
Oct 12 Python
Scrapy的简单使用教程
Oct 24 Python
Python内置模块ConfigParser实现配置读写功能的方法
Feb 12 Python
python 实现将文件或文件夹用相对路径打包为 tar.gz 文件的方法
Jun 10 Python
python 实现的发送邮件模板【普通邮件、带附件、带图片邮件】
Jul 06 Python
python爬取盘搜的有效链接实现代码
Jul 20 Python
python使用openCV遍历文件夹里所有视频文件并保存成图片
Jan 14 Python
使用python创建生成动态链接库dll的方法
May 09 Python
Python基于xlrd模块处理合并单元格
Jul 28 Python
Python模拟登录和登录跳转的参考示例
Oct 30 Python
如何使用Python实现一个简易的ORM模型
May 12 Python
Python+Selenium实现读取网易邮箱验证码
Mar 13 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/12/25 PHP
thinkphp3.2同时连接两个数据库的简单方法
2019/08/13 PHP
Nigma vs Alliance BO5 第一场2.14
2021/03/10 DOTA
javascript新手语法小结
2008/06/15 Javascript
javascript检查日期格式的函数[比较全]
2008/10/17 Javascript
细品javascript 寻址,闭包,对象模型和相关问题
2009/04/27 Javascript
jQuery的实现原理的模拟代码 -3 事件处理
2010/08/03 Javascript
Jquery ThickBox插件使用心得(不建议使用)
2010/09/08 Javascript
jQuery中操控hidden、disable等无值属性的方法
2014/01/06 Javascript
JavaScript实现向setTimeout执行代码传递参数的方法
2015/04/16 Javascript
jquery实现Ctrl+Enter提交表单的方法
2015/07/21 Javascript
前端开发必知的15个jQuery小技巧
2017/01/22 Javascript
JavaScript常用正则验证函数实例小结【年龄,数字,Email,手机,URL,日期等】
2017/01/23 Javascript
bootstrap+spring boot实现面包屑导航功能(前端代码)
2019/10/09 Javascript
JavaScript进阶(二)词法作用域与作用域链实例分析
2020/05/09 Javascript
vue父子组件间引用之$parent、$children
2020/05/20 Javascript
vue 实现一个简单的全局调用弹窗案例
2020/09/10 Javascript
python启动办公软件进程(word、excel、ppt、以及wps的et、wps、wpp)
2009/04/09 Python
对pandas中to_dict的用法详解
2018/06/05 Python
python使用selenium实现批量文件下载
2019/03/11 Python
Python基础学习之基本数据结构详解【数字、字符串、列表、元组、集合、字典】
2019/06/18 Python
德国体育用品网上商店:SC24.com
2016/08/01 全球购物
Ticketmaster德国票务网站:购买音乐会和体育等门票
2016/11/14 全球购物
美国电子元器件分销商:Newark element14
2018/01/13 全球购物
可持续未来的时尚基础:Alternative Apparel
2019/05/06 全球购物
什么情况下你必须要把一个类定义为abstract的
2013/01/06 面试题
说说在weblogic中开发消息Bean时的persistent与non-persisten的差别
2013/04/07 面试题
学子宴答谢词
2014/01/25 职场文书
党员干部反四风对照检查材料思想汇报
2014/09/14 职场文书
先进基层党组织事迹材料
2014/12/25 职场文书
财政局个人总结
2015/03/04 职场文书
创业计划书之家政服务
2019/09/18 职场文书
Django实现drf搜索过滤和排序过滤
2021/06/21 Python
关于python爬虫应用urllib库作用分析
2021/09/04 Python
python 判断文件或文件夹是否存在
2022/03/18 Python
Java实现贪吃蛇游戏的示例代码
2022/09/23 Java/Android