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 相关文章推荐
pycharm 使用心得(四)显示行号
Jun 05 Python
Python+Wordpress制作小说站
Apr 14 Python
python库lxml在linux和WIN系统下的安装
Jun 24 Python
用python中的matplotlib绘制方程图像代码
Nov 21 Python
python turtle 绘制太极图的实例
Dec 18 Python
Ubuntu16.04安装python3.6.5步骤详解
Jan 10 Python
如何使用python传入不确定个数参数
Feb 18 Python
利用pandas向一个csv文件追加写入数据的实现示例
Apr 23 Python
如何在sublime编辑器中安装python
May 20 Python
python能否java成为主流语言吗
Jun 22 Python
python 如何快速复制序列
Sep 07 Python
python中字符串String及其常见操作指南(方法、函数)
Apr 06 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
叶罗丽:为什么大家对颜冰这对CP非常关心,却对金茉两人十分冷漠
2020/03/17 国漫
一个php Mysql类 可以参考学习熟悉下
2009/06/21 PHP
php中return的用法实例分析
2015/02/28 PHP
浅谈关于PHP解决图片无损压缩的问题
2017/09/01 PHP
如何让您的中波更粗更长 - 中波框形天线制作
2021/03/10 无线电
kmock javascript 单元测试代码
2011/02/06 Javascript
Js 代码中,ajax请求地址后加随机数防止浏览器缓存的原因
2013/05/07 Javascript
无缝滚动js代码通俗易懂(自写)
2013/06/19 Javascript
js控制TR的显示隐藏
2016/03/04 Javascript
学习JavaScript图片预加载模块
2016/11/07 Javascript
Javascript 使用ajax与C#获取文件大小实例详解
2017/01/13 Javascript
JQuery 进入页面默认给已赋值的复选框打钩
2017/03/23 jQuery
JavaScript函数柯里化原理与用法分析
2017/03/31 Javascript
node.js 核心http模块,起一个服务器,返回一个页面的实例
2017/09/11 Javascript
通过vue-router懒加载解决首次加载时资源过多导致的速度缓慢问题
2018/04/08 Javascript
[02:15]2014DOTA2国际邀请赛 专访LGD.lin小兔子是大腿
2014/07/14 DOTA
Python3.6 Schedule模块定时任务(实例讲解)
2017/11/09 Python
详解python中asyncio模块
2018/03/03 Python
python实现list由于numpy array的转换
2018/04/04 Python
在pandas中一次性删除dataframe的多个列方法
2018/04/10 Python
用TensorFlow实现lasso回归和岭回归算法的示例
2018/05/02 Python
python导入模块交叉引用的方法
2019/01/19 Python
python实现淘宝购物系统
2019/10/25 Python
Python greenlet和gevent使用代码示例解析
2020/04/01 Python
Python 常用日期处理 -- calendar 与 dateutil 模块的使用
2020/09/02 Python
健身场所或家用健身设备:Life Fitness
2017/11/01 全球购物
PHP高级工程师面试问题推荐
2013/01/18 面试题
可靠的数据流传输TCP
2016/03/15 面试题
钳工实习自我鉴定
2013/09/19 职场文书
给导游的表扬信
2014/01/10 职场文书
警校毕业生自我评价
2014/04/06 职场文书
抗洪救灾先进集体事迹材料
2014/05/26 职场文书
中秋节慰问信
2015/02/15 职场文书
好好学习保证书
2015/02/26 职场文书
html5中sharedWorker实现多页面通信的示例代码
2021/05/07 Javascript
Python中使用tkFileDialog实现文件选择、保存和路径选择
2022/05/20 Python