# python的hashlib提供了常见的摘要算法,如md5(md5算法),sha1等等。摘要:digest
# 摘要算法又称哈希算法、散列算法。
# 它通过一个函数,把任意长度的数据(明文)转换为一个长度固定的数据串(密文)(通常用16进制的字符串表示)。
# 摘要算法就是通过摘要函数f()对任意长度的数据data计算出固定长度的摘要digest,
# 目的是为了发现原始数据是否被人篡改过。摘要算法之所以能指出数据是否被篡改过,
# 就是因为摘要函数是一个单向函数,计算f(data)很容易,但通过digest反推data却非常困难。
# 而且,对原始数据做一个bit的修改,都会导致计算出的摘要完全不同。
# 要注意摘要算法虽然可以用于加密,但网上有很多可以解密的网站,存在一定的被破解的风险。
# 一个明文对应唯一密文。常用于对比登录密码和存储在电脑的密码或网站密码(文件的一致性校验)。
# 如果以明文保存用户口令(用户名或密码),如果数据库泄露,所有用户的口令就落入黑客的手里。黑客撞库。
# 此外,网站运维人员是可以访问数据库的,也就是能获取到所有用户的口令。
# 正确的保存口令的方式是不存储用户的明文口令,而是存储用户口令的摘要,比如md5 # 1.
import hashlib
md5 = hashlib.md5()#md5可改为sha1,比sha1更安全的算法是sha256和sha512,不过越安全的算法越慢,而且摘要长度更长。
md5.update(b'') #b'136320'相当于'136320'.encode('utf-8')。
print(md5.hexdigest())#d5d082d2642302fae506350fff337632,这是md5值,一个32位的16进制字符串。 # 2.如果数据量很大,可以分块多次调用update(),最后计算的结果是一样的:
import hashlib
md5 = hashlib.md5()
md5.update(b'')
md5.update(b'')#13跟6320叠加的md5值跟136320的md5值是一样的。
print(md5.hexdigest())#d5d082d2642302fae506350fff337632
# md5.update(b'136320')
# print(md5.hexdigest())#d5d082d2642302fae506350fff337632 # 3. 用户注册,密码是md5值:
import hashlib
username = input('username:')
password = input('password:')
md5 = hashlib.md5() #获取md5对象
md5.update(bytes(password,encoding = 'utf-8')) #加密:md5.update密码。password.encode('utf-8')
md5_pwd = md5.hexdigest() #获取md5值(密文)
with open('username&password',mode = 'w',encoding = 'utf-8') as f:
f.write('%s&%s'%(username,md5_pwd)) # 4. 用户登录验证:
import hashlib
username = input('username:')
password = input('password:')
with open('username&password',encoding = 'utf-8') as f:
for line in f:
user,pwd = line.split('&')
md5 = hashlib.md5()
md5.update(bytes(password,encoding='utf-8'))
#要写上encoding='utf-8',不然会抛出string argument without an encoding
md5_pwd = md5.hexdigest()
if username == user and md5_pwd == pwd:
print('登录成功')
else:
print('账户或密码不对') # 5. 加盐:经过Salt处理的MD5口令,只要Salt不被黑客知道,即使用户输入简单口令,也很难通过MD5反推明文口令,但也存在一定的被破解的风险。
import hashlib
md5 = hashlib.md5(bytes('salt',encoding = 'utf-8'))#salt可以是任意字符。
md5.update(b'')
print(md5.hexdigest())#dc740385c07799eefb7c1f1ae24050ee
# 加了盐之后,md5值跟原来的d5d082d2642302fae506350fff337632不一样。 #盐后面还可以加其他字符:b'123'
import hashlib
md5 = hashlib.md5(bytes('salt',encoding = 'utf-8') + b'')
md5.update(b'')
print(md5.hexdigest())

day22- hashlib模块-摘要算法(哈希算法)的更多相关文章

  1. hashlib模块--摘要算法

    算法介绍: Python的hashlib提供了常见的摘要算法:MD5,SHA()等. 摘要算法,又称哈希算法,散列算法.通过一个函数,吧任意长度的字符串转换为固定长度的字符串(16进制) 摘要算法就是 ...

  2. hashlib 模块 摘要算法

    应用于用户登陆,对密码进行加密操作, #文件操作 # hashlib 摘要算法 #md5 算法: 是32位的16进制组成的数字字符组成的字符串 #应用最广的摘要算法 #效率高,相对不复杂,如果只是传统 ...

  3. python学习笔记(16)hashlib.md5摘要算法(哈希算法)

    一.摘要算法格式 import hashlib #导入hashlib模块 md = hashlib.md5() #获取一个md5加密算法对象 md.update('how to use md5 in ...

  4. os常用模块,json,pickle,shelve模块,正则表达式(实现运算符分离),logging模块,配置模块,路径叠加,哈希算法

    一.os常用模块 显示当前工作目录 print(os.getcwd()) 返回上一层目录 os.chdir("..") 创建文件包 os.makedirs('python2/bin ...

  5. Python模块——HashLib(摘要算法)与base64

    摘要算法(hashlib) Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 什么是摘要算法呢?摘要算法又称哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长度 ...

  6. hashlib(摘要算法的模块)--重要 (一)

    课件地址:https://www.cnblogs.com/mys6/p/10584933.html  搜索hashlib模块 # 登录认证# 加密 --> 解密# 摘要算法# 两个字符串 :# ...

  7. hashlib模块(摘要算法)

    hashlib(1) # hashlib模块 # 现在写登录认证的时候,需要保存用户名和密码,用户名和密码是保存在文件中,并且都是明文,一旦丢了就完蛋了.所以 # 可以用hashlib将密码转换成密文 ...

  8. .NET平台开源项目速览(12)哈希算法集合类库HashLib

    .NET的System.Security.Cryptography命名空间本身是提供加密服务,散列函数,对称与非对称加密算法等功能.实际上,大部分情况下已经满足了需求,而且.NET实现的都是目前国际上 ...

  9. C# MD5摘要算法、哈希算法

    MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致.是计算机广泛使用的杂凑算法之一(又译摘要算法.哈希算法) MD5算法具有以下特点: 1.压缩 ...

随机推荐

  1. HashMap面试总结

    作者:孤独烟 出处: http://rjzheng.cnblogs.com/ 文章由点及线再及面,写的非常好.修改部分内容 (1) HashMap的实现原理 看过HashMap源码吗,知道原理吗? h ...

  2. lvm 逻辑卷分区删除恢复

    原因:执行 lvremove /dev/system/lv_trans 删除逻辑分区 恢复: 1.进入到lvm查看元数据 cd /etc/lvm/archive 2.恢复元vg卷组 vgcfgrest ...

  3. jquery---利用jquery插件生成二维码

    <script type="text/javascript" src="<?php echo RESOURCE_SITE_URL;?>/js/jquer ...

  4. mybatis中#{}和${}的区别及order by的sql注入问题

    mybatis的#{}和${}的区别以及order by注入问题 原文  http://www.cnblogs.com/chyu/p/4389701.html   前言略,直奔主题.. #{}相当于j ...

  5. 剑指offer第40题

    package com.yan.offer; /** * 题目描述: * * 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. * * @author Ya ...

  6. ES系列之Promise async 和 await

    概述 promise是异步编程的一种解决方案,比传统的解决方案—回调函数和事件—更合理更强大. 所谓的promise就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作的结果). Pro ...

  7. 删除xcode项目中不再使用的图片资源

    1. 利用工具    下载地址  http://jeffhodnett.github.io/Unused/   运行效果如下 2. 通过终端 执行 shell 命令 a. 第一步建立.sh 文件  如 ...

  8. WOJ 1538 Stones II 转化背包问题

    昨天是我负责这个题目的,最后没搞出来,真的给队伍拖后腿了. 当时都推出来了 我假设最后结果是取了m个物品,则我把这个m个物品按取的先后编号为 k1 k2 k3 k4...km 则最终结果就是 (k1. ...

  9. git commit 后 尚未push到远程,撤销commit

    执行commit后,还没执行push时,想要撤销这次的commit,该怎么办? 解决方案: 使用命令: git reset --soft HEAD^ 这样就成功撤销了commit,如果想要连着add也 ...

  10. Exchange 2016 CU3 安装失败解决方法

    Exchange 2016 CU3 安装失败解决方法 1. 问题: 由于前期安装过Exchange 2010 ,服务器非正常删除,后期人员无法跟进,在新安装Exchange 2016时准备工作正常完成 ...