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 del()函数用法
Mar 24 Python
Flask的图形化管理界面搭建框架Flask-Admin的使用教程
Jun 13 Python
python队列通信:rabbitMQ的使用(实例讲解)
Dec 22 Python
对numpy中数组元素的统一赋值实例
Apr 04 Python
python使用Flask操作mysql实现登录功能
May 14 Python
python实现数据分析与建模
Jul 11 Python
python实现图片中文字分割效果
Jul 22 Python
Pytorch 抽取vgg各层并进行定制化处理的方法
Aug 20 Python
python对Excel按条件进行内容补充(推荐)
Nov 24 Python
python实现马丁策略的实例详解
Jan 15 Python
matplotlib部件之矩形选区(RectangleSelector)的实现
Feb 01 Python
深入浅析python3 依赖倒置原则(示例代码)
Jul 09 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
PHP4和PHP5共存于一系统
2006/11/17 PHP
PHP三元运算符的结合性介绍
2012/01/10 PHP
修改Laravel5.3中的路由文件与路径
2016/08/10 PHP
php array_values 返回数组的值实例详解
2016/11/17 PHP
javascript编程起步(第六课)
2007/01/10 Javascript
Open and Print a Word Document
2007/06/15 Javascript
JavaScript 关键字屏蔽实现函数
2009/08/02 Javascript
常见的jQuery选择器汇总
2014/11/24 Javascript
jQuery AjaxUpload 上传图片代码
2016/02/02 Javascript
jquery模拟多级复选框效果的简单实例
2016/06/08 Javascript
jquery之别踩白块游戏的简单实现
2016/07/25 Javascript
基于JavaScript实现选项卡效果
2017/07/21 Javascript
Node配合WebSocket做多文件下载以及进度回传
2019/11/07 Javascript
vue实现分页加载效果
2019/12/24 Javascript
使用Vue Composition API写出清晰、可扩展的表单实现
2020/06/10 Javascript
Vue 禁用浏览器的前进后退操作
2020/09/04 Javascript
Python内置数据类型详解
2014/08/18 Python
Python脚本暴力破解栅栏密码
2015/10/19 Python
selenium+python实现自动登录脚本
2018/04/22 Python
Pandas 重塑(stack)和轴向旋转(pivot)的实现
2019/07/22 Python
python config文件的读写操作示例
2019/09/27 Python
python requests模拟登陆github的实现方法
2019/12/26 Python
python ubplot使用方法解析
2020/01/10 Python
tensorflow获取预训练模型某层参数并赋值到当前网络指定层方式
2020/01/24 Python
TensorFlow加载模型时出错的解决方式
2020/02/06 Python
Python 如何展开嵌套的序列
2020/08/01 Python
matplotlib教程——强大的python作图工具库
2020/10/15 Python
HTML5 实现一个访问本地文件的实例
2012/12/13 HTML / CSS
遮罩层 + Iframe实现界面自动显示的示例代码
2020/04/26 HTML / CSS
巴西服装和鞋子购物网站:Marisa
2018/10/25 全球购物
python+selenium小米商城红米K40手机自动抢购的示例代码
2021/03/24 Python
消防安全责任书
2014/04/14 职场文书
优秀党务工作者事迹材料
2014/05/07 职场文书
拔河比赛新闻稿
2015/07/17 职场文书
八年级地理课件资料及考点知识分享
2019/08/30 职场文书
python小程序之飘落的银杏
2021/04/17 Python