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编写vim插件的简单示例
Apr 17 Python
Python素数检测的方法
May 11 Python
实例探究Python以并发方式编写高性能端口扫描器的方法
Jun 14 Python
tensorflow创建变量以及根据名称查找变量
Mar 10 Python
利用python和百度地图API实现数据地图标注的方法
May 13 Python
Python字典添加,删除,查询等相关操作方法详解
Feb 07 Python
Python ORM框架Peewee用法详解
Apr 29 Python
Django 如何使用日期时间选择器规范用户的时间输入示例代码详解
May 22 Python
Python 操作SQLite数据库的示例
Oct 16 Python
Python机器学习工具scikit-learn的使用笔记
Jan 28 Python
Python控制台输出俄罗斯方块的方法实例
Apr 17 Python
Python打包exe时各种异常处理方案总结
May 18 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
《雄兵连》《烈阳天道》真的来了
2020/07/13 国漫
PHP 数组入门教程小结
2009/05/20 PHP
第二章 PHP入门基础之php代码写法
2011/12/30 PHP
PHP ignore_user_abort函数详细介绍和使用实例
2014/07/15 PHP
PHP 7.0.2 正式版发布
2016/01/08 PHP
laravel 操作数据库常用函数的返回值方法
2019/10/11 PHP
js压缩利器
2007/02/20 Javascript
Ajax 数据请求的简单分析
2011/04/05 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(五)可移动地图的实现
2013/01/23 Javascript
js改变鼠标的形状和样式的方法
2014/03/31 Javascript
鼠标移到图片上变大显示而不是放大镜效果
2014/06/15 Javascript
JS实现不使用图片仿Windows右键菜单效果代码
2015/10/22 Javascript
在windows上用nodejs搭建静态文件服务器的简单方法
2016/08/11 NodeJs
简单实现JavaScript图片切换效果
2016/11/28 Javascript
jQuery动态生成表格及右键菜单功能示例
2017/01/13 Javascript
AngularJS监听路由变化的方法
2017/03/07 Javascript
Vuex和前端缓存的整合策略详解
2017/05/09 Javascript
JS实现点击下拉菜单把选择的内容同步到input输入框内的实例
2018/01/23 Javascript
使用Vue.set()方法实现响应式修改数组数据步骤
2019/11/09 Javascript
three.js利用gpu选取物体并计算交点位置的方法示例
2019/11/25 Javascript
如何基于js判断浏览器版本
2020/02/20 Javascript
从零学python系列之数据处理编程实例(一)
2014/05/22 Python
详细介绍Python函数中的默认参数
2015/03/30 Python
python解析基于xml格式的日志文件
2017/02/25 Python
Python 实现某个功能每隔一段时间被执行一次的功能方法
2018/10/14 Python
给我一面国旗 python帮你实现
2019/09/30 Python
Python参数传递实现过程及原理详解
2020/05/14 Python
伦敦一家非常流行的时尚精品店:Oxygen Boutique
2017/01/15 全球购物
预订从美国飞往印度的机票:MyTicketsToIndia
2017/05/19 全球购物
销售工作岗位职责
2013/12/24 职场文书
2015年大学班长个人工作总结
2015/04/24 职场文书
超搞笑婚前保证书
2015/05/08 职场文书
小学六一主持词开场白
2015/05/28 职场文书
大学生暑期实践报告之企业经营管理
2019/08/08 职场文书
MySQL官方导出工具mysqlpump的使用
2021/05/21 MySQL
vue响应式原理与双向数据的深入解析
2021/06/04 Vue.js