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中的round()方法
May 15 Python
linux安装Python3.4.2的操作方法
Sep 28 Python
Python多线程应用于自动化测试操作示例
Dec 06 Python
Python面向对象程序设计类的封装与继承用法示例
Apr 12 Python
python 搜索大文件的实例代码
Jul 08 Python
Python使用import导入本地脚本及导入模块的技巧总结
Aug 07 Python
Python关于__name__属性的含义和作用详解
Feb 19 Python
Python中的wordcloud库安装问题及解决方法
May 27 Python
Python高并发解决方案实现过程详解
Jul 31 Python
Python实现列表索引批量删除的5种方法
Nov 16 Python
Django项目如何正确配置日志(logging)
Apr 29 Python
pytorch 如何使用amp进行混合精度训练
May 24 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
Php中用PDO查询Mysql来避免SQL注入风险的方法
2013/04/25 PHP
PHP 验证码不显示只有一个小红叉的解决方法
2013/09/30 PHP
php object转数组示例
2014/01/15 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十)
2014/06/24 PHP
thinkphp隐藏index.php/home并允许访问其他模块的实现方法
2016/10/13 PHP
thinkPHP js文件中U方法不被解析问题的解决方法
2016/12/05 PHP
php json相关函数用法示例
2017/03/28 PHP
PHP获取php,mysql,apche的版本信息及更多服务器信息
2021/03/09 PHP
js setTimeout 常见问题小结
2013/08/13 Javascript
javascript父、子页面交互技巧总结
2014/08/08 Javascript
window.open打开窗口被拦截的快速解决方法
2016/08/04 Javascript
JavaScript性能优化总结之加载与执行
2016/08/11 Javascript
AngularJs Scope详解及示例代码
2016/09/01 Javascript
js控制li的隐藏和显示实例代码
2016/10/15 Javascript
Angularjs中ng-repeat的简单实例
2017/08/25 Javascript
在 Typescript 中使用可被复用的 Vue Mixin功能
2018/04/17 Javascript
详解vue2.0 资源文件assets和static的区别
2018/11/27 Javascript
Vue项目中配置pug解析支持
2019/05/10 Javascript
echarts大屏字体自适应的方法步骤
2019/07/12 Javascript
Vue的生命周期操作示例
2019/09/17 Javascript
ES6的异步操作之promise用法和async函数的具体使用
2019/12/06 Javascript
JS如何生成随机验证码
2020/03/02 Javascript
python实践项目之监控当前联网状态详情
2019/05/23 Python
python构建指数平滑预测模型示例
2019/11/21 Python
Python下划线5种含义代码实例解析
2020/07/10 Python
Python字符串的15个基本操作(小结)
2021/02/03 Python
捷科时代的软件测试笔试题
2015/11/09 面试题
我的求职计划书
2014/01/10 职场文书
建筑个人求职信范文
2014/01/25 职场文书
机关工会开展学习雷锋活动总结
2014/03/01 职场文书
决心书范文
2014/03/11 职场文书
房产买卖委托公证书
2014/04/04 职场文书
励志演讲稿大全
2014/08/21 职场文书
2015年第十五个全民国防教育日宣传活动方案
2015/05/06 职场文书
JavaScript offset实现鼠标坐标获取和窗口内模块拖动
2021/05/30 Javascript
mysql拆分字符串作为查询条件的示例代码
2022/07/07 MySQL