# 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. POJ 1840:Eqs 哈希求解五元方程

    Eqs Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 14169   Accepted: 6972 Description ...

  2. MFC下的网络编程(1)CAsyncSocket进行无连接(UDP)通信

    服务器端发送数据给客户端 先看服务器端: CAsyncSocket m_sockSend;                       //声明一个Socket对象 点击发送数据后,执行下面这些动作 ...

  3. 递归(VBA实现)

    案列: 给定n个数,取任意g个数之和等于h的组合. 采用递归的方式实现: Option Explicit Dim arr1(1 To 10000, 1 To 1) As String Dim k, g ...

  4. 学习Github必须要会的知识

    目的     托管项目代码 基本概念 仓库Respository   存放项目代码,每个项目对应一个仓库,多个开源项目则有多个仓库. 收藏Star   收藏项目,方便下次查看. 复制克隆项目Fork ...

  5. 7.3 使用while 循环来处理列表和字典

    # 7.3.1 在列表之间移动元素 # confirmed_users.py # 首先,创建一个待验证用户列表 # 和一个用于存储已验证用户的空列表 uncomfirmed_users = ['jam ...

  6. Java中Scanner类在nextInt()后无法输入nextLine()的问题

    首先,Scanner是一个扫描器,它扫描数据都是去内存中一块缓冲区中进行扫描并读入数据的,而我们在控制台中输入的数据也都是被先存入缓冲区中等待扫描器的扫描读取.这个扫描器在扫描过程中判断停止的依据就是 ...

  7. 【系统安装】如何在VMware软件中安装ghost格式的系统

    一.安装准备 1.系统虚拟环境软件:VMware软件(下载链接) 2.系统镜像制作软件:UltraISO[软碟通是光盘映像文件制作/编辑/转换工具](下载链接) 3.系统安装辅助软件:Win7PE(下 ...

  8. Dynamics CRM - 在 Dynamics CRM 开发中创建一个 Entity 对象

    在 Dynamics CRM 的开发中,我们时不时需要创建 Entity 对象,而对于如何创建 Entity 对象,在 C# plugin 和 JS 的写法存在些许差异. 一.C# Plugin 创建 ...

  9. POJ 3660 Cow Contest【Floyd 传递闭包】

    传送门:http://poj.org/problem?id=3660 题意:有n头牛, 给你m对关系.(a, b)表示牛a能打败牛b, 求在给出的这些关系下, 能确定多少头牛的排名. 传递闭包: 关系 ...

  10. CMake命令之install

    CMAKE_INSTALL_PREFIX Install directory used by install(). if make install is invoked or INSTALL is b ...