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构造icmp echo请求和实现网络探测器功能代码分享
Jan 10 Python
Python使用代理抓取网站图片(多线程)
Mar 14 Python
python3简单实现微信爬虫
Apr 09 Python
Python编写电话薄实现增删改查功能
May 07 Python
使用Python对Excel进行读写操作
Mar 30 Python
全面了解Nginx, WSGI, Flask之间的关系
Jan 09 Python
python pandas dataframe 行列选择,切片操作方法
Apr 10 Python
python re模块的高级用法详解
Jun 06 Python
python3.5绘制随机漫步图
Aug 27 Python
Pycharm最常用的快捷键及使用技巧
Mar 05 Python
python 实现Harris角点检测算法
Dec 11 Python
python的scipy.stats模块中正态分布常用函数总结
Feb 19 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
CentOS 6.3下安装PHP xcache扩展模块笔记
2014/09/10 PHP
PHP Web木马扫描器代码分享
2015/09/06 PHP
javascript 数据类型转换(parseInt,parseFloat)
2010/07/20 Javascript
利用腾讯的ip地址库做ip物理地址定位
2010/07/24 Javascript
为jQuery.Treeview添加右键菜单的实现代码
2010/10/22 Javascript
js键盘上下左右键怎么触发function(实例讲解)
2013/12/14 Javascript
jquery 淡入淡出效果的简单实现
2014/02/07 Javascript
JS动态修改iframe内嵌网页地址的方法
2015/04/01 Javascript
Javascript使用post方法提交数据实例
2015/08/03 Javascript
Javascript HTML5 Canvas实现的一个画板
2020/04/12 Javascript
教你一步步用jQyery实现轮播器
2016/12/18 Javascript
浅谈struts1 & jquery form 文件异步上传
2017/05/25 jQuery
Node.js net模块功能及事件监听用法分析
2019/01/05 Javascript
JQuery绑定事件四种实现方法解析
2020/12/02 jQuery
[49:21]完美世界DOTA2联赛循环赛 Ink Ice vs LBZS BO2第二场 11.05
2020/11/06 DOTA
python dict remove数组删除(del,pop)
2013/03/24 Python
一个超级简单的python web程序
2014/09/11 Python
Python实现树的先序、中序、后序排序算法示例
2017/06/23 Python
Python FTP两个文件夹间的同步实例代码
2018/05/25 Python
Python实现批量修改图片格式和大小的方法【opencv库与PIL库】
2018/12/03 Python
python opencv判断图像是否为空的实例
2019/01/26 Python
在PyTorch中Tensor的查找和筛选例子
2019/08/18 Python
python3.6生成器yield用法实例分析
2019/08/23 Python
python 图像增强算法实现详解
2021/01/24 Python
CSS3 透明色 RGBA使用介绍
2013/08/06 HTML / CSS
国际领先的学术出版商:Springer
2017/01/11 全球购物
请解释接口的显式实现有什么意义
2012/05/26 面试题
预备党员思想汇报范文
2014/01/11 职场文书
班主任工作经验材料
2014/02/02 职场文书
五年级科学教学反思
2014/02/05 职场文书
大三学生学年自我鉴定
2014/09/12 职场文书
英文邀请函
2015/02/02 职场文书
幼儿园2015年度工作总结
2015/04/01 职场文书
2015年服务员个人工作总结
2015/05/27 职场文书
爱国主义主题班会
2015/08/14 职场文书
Python爬虫基础初探selenium
2021/05/31 Python