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常用方法和技巧
May 18 Python
Python运算符重载用法实例
May 28 Python
Python赋值语句后逗号的作用分析
Jun 08 Python
Python写的一个简单监控系统
Jun 19 Python
python学习之matplotlib绘制散点图实例
Dec 09 Python
python编程使用协程并发的优缺点
Sep 20 Python
pandas的排序和排名的具体使用
Jul 31 Python
IronPython连接MySQL的方法步骤
Dec 27 Python
python对象销毁实例(垃圾回收)
Jan 16 Python
python使用docx模块读写docx文件的方法与docx模块常用方法详解
Feb 17 Python
Pycharm连接gitlab实现过程图解
Sep 01 Python
Python3利用openpyxl读写Excel文件的方法实例
Feb 03 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
第六节 访问属性和方法 [6]
2006/10/09 PHP
apache和php之间协同工作的配置经验分享
2013/04/08 PHP
php批量删除cookie的简单实现方法
2015/01/26 PHP
php curl发送请求实例方法
2019/08/01 PHP
Apply an AutoFormat to an Excel Spreadsheet
2007/06/12 Javascript
jQuery load方法用法集锦
2011/12/06 Javascript
js综合应用实例简单的表格统计
2013/09/03 Javascript
jQuery中;function($,undefined) 前面的分号的用处
2014/12/17 Javascript
jQuery使用drag效果实现自由拖拽div
2015/06/11 Javascript
JavaScript中实现键值对应的字典与哈希表结构的示例
2016/06/12 Javascript
JS实现表单多文件上传样式美化支持选中文件后删除相关项
2016/09/30 Javascript
jstree创建无限分级树的方法【基于ajax动态创建子节点】
2016/10/25 Javascript
Vue.js 递归组件实现树形菜单(实例分享)
2016/12/21 Javascript
Bootstrap源码解读模态弹出框(11)
2016/12/28 Javascript
js处理层级数据结构的方法小结
2017/01/17 Javascript
微信小程序 动态传参实例详解
2017/04/27 Javascript
angular4 如何在全局设置路由跳转动画的方法
2017/08/30 Javascript
JavaScript中字符串的常用操作方法及特殊字符
2018/03/18 Javascript
如何进行微信公众号开发的本地调试的方法
2019/06/16 Javascript
适合前端Vue开发童鞋的跨平台Weex的使用详解
2019/10/16 Javascript
[01:02:17]2014 DOTA2华西杯精英邀请赛 5 24 DK VS VG
2014/05/26 DOTA
[06:16]DOTA2守卫传承者——职业选手谈心路历程
2015/02/26 DOTA
Python中规范定义命名空间的一些建议
2016/06/04 Python
python 从文件夹抽取图片另存的方法
2018/12/04 Python
python selenium执行所有测试用例并生成报告的方法
2019/02/13 Python
python移位运算的实现
2019/07/15 Python
python实现数字炸弹游戏程序
2020/07/17 Python
华为旗下电子商务平台:华为商城
2016/08/06 全球购物
马来西亚时装购物网站:ZALORA马来西亚
2017/03/14 全球购物
韩国最大的购物网站:Gmarket
2019/06/20 全球购物
创业计划实施的7大步骤
2014/02/05 职场文书
关于祖国的演讲稿
2014/05/04 职场文书
2015年办公室文秘工作总结
2015/04/30 职场文书
酒店厨房管理制度
2015/08/06 职场文书
JavaScript继承的三种方法实例
2021/05/12 Javascript
SQLyog的下载、安装、破解、配置教程(MySQL可视化工具安装)
2022/09/23 MySQL