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将多个文本文件合并为一个文本的代码(便于搜索)
Mar 13 Python
python实现倒计时的示例
Feb 14 Python
使用Python进行新浪微博的mid和url互相转换实例(10进制和62进制互算)
Apr 25 Python
python继承和抽象类的实现方法
Jan 14 Python
python自动格式化json文件的方法
Mar 11 Python
python+pandas生成指定日期和重采样的方法
Apr 11 Python
Python学习笔记之视频人脸检测识别实例教程
Mar 06 Python
使用Python画出小人发射爱心的代码
Nov 23 Python
python实现五子棋游戏(pygame版)
Jan 19 Python
tensorflow之自定义神经网络层实例
Feb 07 Python
浅谈matplotlib.pyplot与axes的关系
Mar 06 Python
Python函数式编程中itertools模块详解
Sep 15 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
对text数据类型不支持代码页转换 从: 1252 到: 936
2011/04/23 PHP
PHP数字和字符串ID互转函数(类似优酷ID)
2014/06/30 PHP
PHP中上传文件打印错误错误类型分析
2019/04/14 PHP
Gird组件 Part-3:范例RSSFeed Viewer
2007/03/10 Javascript
javascript中的new使用
2010/03/20 Javascript
jquery+json实现的搜索加分页效果
2010/03/31 Javascript
学习从实践开始之jQuery插件开发 对话框插件开发
2012/04/26 Javascript
使用js正则控制input标签只允许输入的值
2013/07/29 Javascript
我的Node.js学习之路(二)NPM模块管理
2014/07/06 Javascript
JavaScript下的时间格式处理函数Date.prototype.format
2016/01/27 Javascript
jQuery实现可拖拽的许愿墙效果【附demo源码下载】
2016/09/14 Javascript
vue.js通过自定义指令实现数据拉取更新的实现方法
2016/10/18 Javascript
详解AngularJS中$filter过滤器使用(自定义过滤器)
2017/02/04 Javascript
原生JS实现图片翻书效果
2017/02/16 Javascript
详解如何在项目中使用jest测试react native组件
2018/02/09 Javascript
vue轮播图插件vue-concise-slider的使用
2018/03/13 Javascript
jQuery实现聊天对话框
2020/02/08 jQuery
vue.js 输入框输入值自动过滤特殊字符替换中问标点操作
2020/08/31 Javascript
[15:09]DOTA2国际邀请赛采访专栏:Loda
2013/08/06 DOTA
Python实现在matplotlib中两个坐标轴之间画一条直线光标的方法
2015/05/20 Python
分享Python文本生成二维码实例
2016/01/06 Python
python中virtualenvwrapper安装与使用
2018/05/20 Python
PyQt5 实现字体大小自适应分辨率的方法
2019/06/18 Python
Django视图扩展类知识点详解
2019/10/25 Python
Python小程序之在图片上加入数字的代码
2019/11/26 Python
使用python和pygame制作挡板弹球游戏
2019/12/03 Python
Virtualenv 搭建 Py项目运行环境的教程详解
2020/06/22 Python
python opencv实现图像配准与比较
2021/02/09 Python
华丽的手绘陶瓷:MacKenzie-Childs
2017/02/04 全球购物
美国优质马术服装购买网站:Breeches.com
2019/12/16 全球购物
体育运动口号
2014/06/09 职场文书
先进个人材料怎么写
2014/12/30 职场文书
开工典礼致辞
2015/07/29 职场文书
高中开学感言
2015/08/01 职场文书
搞笑婚礼主持词开场白
2015/11/24 职场文书
Java时间工具类Date的常用处理方法
2022/05/25 Java/Android