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实现定时播放mp3
Mar 29 Python
在Python的Django框架中simple-todo工具的简单使用
May 30 Python
Python实现的拟合二元一次函数功能示例【基于scipy模块】
May 15 Python
Python实现朴素贝叶斯分类器的方法详解
Jul 04 Python
总结Python图形用户界面和游戏开发知识点
May 22 Python
python删除列表元素的三种方法(remove,pop,del)
Jul 22 Python
对Tensorflow中Device实例的生成和管理详解
Feb 04 Python
Django框架获取form表单数据方式总结
Apr 22 Python
python调用百度AI接口实现人流量统计
Feb 03 Python
在Django中使用MQTT的方法
May 10 Python
Pycharm 如何设置HTML文件自动补全代码或标签
May 21 Python
Python基本知识点总结
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
多人战的战术与战略
2020/03/04 星际争霸
php的sso单点登录实现方法
2015/01/08 PHP
PHP时间和日期函数详解
2015/05/08 PHP
PHP pthreads v3下同步处理synchronized用法示例
2020/02/21 PHP
jquery dialog键盘事件代码
2010/08/01 Javascript
JQuery小知识
2010/10/15 Javascript
angular中使用路由和$location切换视图
2015/01/23 Javascript
JS使用cookie实现DIV提示框只显示一次的方法
2015/11/05 Javascript
javascript中加var和不加var的区别 你真的懂吗
2016/01/06 Javascript
JavaScript类型检测之typeof 和 instanceof 的缺陷与优化
2016/01/13 Javascript
jQuery Timelinr实现垂直水平时间轴插件(附源码下载)
2016/02/16 Javascript
javascript如何创建对象
2016/08/29 Javascript
jquery 追加元素append、prepend、before、after用法与区别分析
2016/12/02 Javascript
JS库之ParticlesJS使用简介
2017/09/12 Javascript
解决layer弹层遮罩挡住窗体的问题
2018/08/17 Javascript
webpack的CSS加载器的使用
2018/09/11 Javascript
js中位运算的运用实例分析
2018/12/11 Javascript
开源一个微信小程序仪表盘组件过程解析
2019/07/30 Javascript
一篇文章带你浅入webpack的DLL优化打包
2020/02/20 Javascript
[01:32]DOTA2 2015国际邀请赛中国区预选赛第四日战报
2015/05/29 DOTA
[02:26]2016国际邀请赛8月3日开战 中国军团出征西雅图
2016/08/02 DOTA
python检测lvs real server状态
2014/01/22 Python
Python中index()和seek()的用法(详解)
2017/04/27 Python
Python基础知识_浅谈用户交互
2017/05/31 Python
Python中循环引用(import)失败的解决方法
2018/04/22 Python
Django Web开发中django-debug-toolbar的配置以及使用
2018/05/06 Python
Django 浅谈根据配置生成SQL语句的问题
2018/05/29 Python
Python实现按逗号分隔列表的方法
2018/10/23 Python
华丽的手绘陶瓷:MacKenzie-Childs
2017/02/04 全球购物
幼儿运动会邀请函
2014/01/17 职场文书
《我为你骄傲》教学反思
2014/02/20 职场文书
差生评语大全
2014/05/04 职场文书
计划生育工作汇报
2014/10/28 职场文书
承兑汇票转让证明怎么写?
2014/11/30 职场文书
会计工作检讨书
2015/02/19 职场文书
SQL Server使用导出向导功能
2022/04/08 SQL Server