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自动化测试实例解析
Sep 28 Python
python实现支持目录FTP上传下载文件的方法
Jun 03 Python
Python抓取框架 Scrapy的架构
Aug 12 Python
利用python获取某年中每个月的第一天和最后一天
Dec 15 Python
TensorFlow利用saver保存和提取参数的实例
Jul 26 Python
python中redis查看剩余过期时间及用正则通配符批量删除key的方法
Jul 30 Python
Python Numpy计算各类距离的方法
Jul 05 Python
python中的RSA加密与解密实例解析
Nov 18 Python
详解Python 重学requests发起请求的基本方式
Feb 07 Python
Django import export实现数据库导入导出方式
Apr 03 Python
解决Keras中循环使用K.ctc_decode内存不释放的问题
Jun 29 Python
python区块链持久化和命令行接口实现简版
May 25 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
上海永华YH-R296(华普R-96)12波段立体声收音机的分析和打理
2021/03/02 无线电
php网站判断用户是否是手机访问的方法
2013/11/01 PHP
PHP中使用smarty生成静态文件的例子
2014/04/24 PHP
浅析get与post的一些特殊情况
2014/07/28 PHP
一个php生成16位随机数的代码(两种方法)
2014/09/16 PHP
laravel实现分页样式替换示例代码(增加首、尾页)
2017/09/22 PHP
Django 标签筛选的实现代码(一对多、多对多)
2018/09/05 PHP
PHP生成短网址的思路以及实现方法的详解
2019/03/25 PHP
jquery maxlength使用说明
2011/09/09 Javascript
js中的数组Array定义与sort方法使用示例
2013/08/29 Javascript
JS去除数组重复值的五种不同方法
2013/09/06 Javascript
jQuery+ajax实现鼠标单击修改内容的方法
2014/06/27 Javascript
Node.js的项目构建工具Grunt的安装与配置教程
2016/05/12 Javascript
jQuery+ajax的资源回收处理机制分析
2017/01/07 Javascript
gulp加批处理(.bat)实现ng多应用一键自动化构建
2017/02/16 Javascript
Vuejs中使用markdown服务器端渲染的示例
2017/11/22 Javascript
angular2 ng2-file-upload上传示例代码
2018/08/23 Javascript
vue中的计算属性实例详解
2018/09/19 Javascript
Vue实现移动端页面切换效果【推荐】
2018/11/13 Javascript
微信小程序实现页面浮动导航
2019/01/28 Javascript
vue 设置 input 为不可以编辑的实现方法
2019/09/19 Javascript
Python import用法以及与from...import的区别
2015/05/28 Python
Python遍历pandas数据方法总结
2018/02/09 Python
python实现微信远程控制电脑
2018/02/22 Python
python实现逆序输出一个数字的示例讲解
2018/06/25 Python
对python3中, print横向输出的方法详解
2019/01/28 Python
Python3.8对可迭代解包的改进及用法详解
2019/10/15 Python
Python列表推导式实现代码实例
2020/09/09 Python
css3 clip实现圆环进度条的示例代码
2018/02/07 HTML / CSS
英国最受欢迎的价格比较网站之一:MoneySuperMarket
2018/12/19 全球购物
LightInTheBox法国站:中国跨境电商
2020/03/05 全球购物
茶叶生产计划书
2014/01/10 职场文书
行政助理工作职责范本
2014/03/04 职场文书
铲车司机岗位职责
2014/03/15 职场文书
优秀毕业生求职信
2014/06/05 职场文书
vue如何批量引入组件、注册和使用详解
2021/05/12 Vue.js