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 基础学习第二弹 类属性和实例属性
Aug 27 Python
python中xrange用法分析
Apr 15 Python
Python的Django框架中的数据库配置指南
Jul 17 Python
Python简单实现查找一个字符串中最长不重复子串的方法
Mar 26 Python
Python 批量合并多个txt文件的实例讲解
May 08 Python
PyQt5实现五子棋游戏(人机对弈)
Mar 24 Python
win8.1安装Python 2.7版环境图文详解
Jul 01 Python
OpenCV 之按位运算举例解析
Jun 19 Python
在CentOS7下安装Python3教程解析
Jul 09 Python
Python文件夹批处理操作代码实例
Jul 21 Python
python中turtle库的简单使用教程
Nov 11 Python
Python OpenCV形态学运算示例详解
Apr 07 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中函数的形参与实参的问题说明
2010/09/01 PHP
php调用KyotoTycoon简单实例
2015/04/02 PHP
php实现在线通讯录功能(附源码)
2016/05/13 PHP
ThinkPHP打水印及设置水印位置的方法
2016/10/14 PHP
thinkphp5 框架结合plupload实现图片批量上传功能示例
2020/04/04 PHP
安装PHP扩展时解压官方 tgz 文件后没有configure文件无法进行配置编译的问题
2020/08/26 PHP
跨浏览器开发经验总结(三)   警惕“IE依赖综合症”
2010/05/13 Javascript
js下判断 iframe 是否加载完成的完美方法
2010/10/26 Javascript
javascript自动改变文字大小和颜色的效果的小例子
2013/08/02 Javascript
Node.js中的缓冲与流模块详细介绍
2015/02/11 Javascript
跟我学习javascript的垃圾回收机制与内存管理
2015/11/23 Javascript
jQuery弹簧插件编写基础之“又见弹窗”
2015/12/11 Javascript
js实现加载更多功能实例
2016/10/27 Javascript
详解webpack自动生成html页面
2017/06/29 Javascript
jq源码解析之绑在$,jQuery上面的方法(实例讲解)
2017/10/13 jQuery
用jQuery将JavaScript对象转换为querystring查询字符串的方法
2018/11/12 jQuery
jQuery中使用validate插件校验表单功能
2019/05/24 jQuery
用map函数来完成Python并行任务的简单示例
2015/04/02 Python
讲解Python中fileno()方法的使用
2015/05/24 Python
python使用 HTMLTestRunner.py生成测试报告
2017/10/20 Python
python的pip安装以及使用教程
2018/09/18 Python
python实现视频分帧效果
2019/05/31 Python
Pandas0.25来了千万别错过这10大好用的新功能
2019/08/07 Python
Python字典生成式、集合生成式、生成器用法实例分析
2020/01/07 Python
django日志默认打印request请求信息的方法示例
2020/05/17 Python
python字典的值可以修改吗
2020/06/29 Python
如何让python的运行速度得到提升
2020/07/08 Python
详解CSS3中字体平滑处理和抗锯齿渲染
2017/03/29 HTML / CSS
网上常见的一份Linux面试题(多项选择部分)
2015/02/07 面试题
城管综合整治方案
2014/05/01 职场文书
国旗下的演讲稿
2014/05/08 职场文书
2015年大学社团工作总结
2015/04/09 职场文书
2015年派出所工作总结
2015/04/24 职场文书
2015最新婚礼司仪主持词
2015/06/30 职场文书
辞职离别感言
2015/08/04 职场文书
学习弘扬焦裕禄精神心得体会
2016/01/23 职场文书