Python中摘要算法MD5,SHA1简介及应用实例代码

作者:neu_张康 时间:2023-12-12 00:36:41 

关于算法的学习,小编觉得编程语言中的算法大都有一些相通的地方,主要的方面一是了解这一算法能用来干什么,另一方面,学习它在这类编程语言中怎么实现。

摘要算法又称哈希算法、散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用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!')

来源:http://blog.csdn.net/csdn15698845876/article/details/78305467

标签:Python,MD5,SHA1
0
投稿

猜你喜欢

  • 5分钟快速掌握Python定时任务框架的实现

    2023-05-31 10:19:45
  • QT连接Oracle数据库并实现登录验证的操作步骤

    2024-01-27 13:06:44
  • mysql 截取指定的两个字符串之间的内容

    2024-01-17 21:19:54
  • 通过实例了解JS 连续赋值

    2024-05-02 16:15:14
  • 快速解决pandas.read_csv()乱码的问题

    2023-07-10 21:14:47
  • python使用fork实现守护进程的方法

    2021-08-27 00:37:50
  • Python flask 框架使用flask-login 模块的详细过程

    2021-05-02 04:38:08
  • python数值基础知识浅析

    2021-12-10 07:07:49
  • 安装PyInstaller失败问题解决

    2022-03-18 04:21:41
  • 微信小程序实现图片上传功能

    2023-09-06 13:08:44
  • Python项目实战之使用Django框架实现支付宝付款功能

    2021-12-11 23:28:11
  • asp根据出生时间判断生肖

    2008-03-24 19:49:00
  • python 判断网络连通的实现方法

    2021-07-28 06:47:29
  • JQuery判断radio(单选框)是否选中和获取选中值方法总结

    2024-04-19 10:24:11
  • python爬取酷狗音乐Top500榜单

    2023-01-26 03:09:17
  • Python Opencv实现最强美颜滤镜效果

    2021-11-09 11:23:15
  • Python中类和对象的绑定及非绑定方法详解

    2023-03-13 12:27:32
  • PHP中Trait及其应用详解

    2023-11-24 06:33:05
  • python实现剪贴板的操作

    2021-09-06 08:46:16
  • python http接口自动化脚本详解

    2022-09-01 05:24:30
  • asp之家 网络编程 m.aspxhome.com