hashlib模块使用详情

 

python经常使用模块目录html

 

一:hashlib简介

一、什么叫hash:hash是一种算法(不一样的hash算法只是复杂度不同)(3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法),该算法接受传入的内容,通过运算获得一串hash值
二、hash值的特色是(hash值/产品有三大特性:):
2.1 只要传入的内容同样,获得的hash值必然同样=====>要用明文传输密码文件完整性校验
2.2 不能由hash值返解成内容=======》把密码作成hash值,不该该在网络传输明文密码(只能有内容返回hash值)
2.3 只要使用的hash算法不变,不管校验的内容有多大,获得的hash值长度是固定的(如从网上下载文件要进行hash校验,保证网络传输没有丢包)
基于2.1和2.3能够作文件下载一致性的校验
基于2.1和2.2能够对用户密码进行加密
hash算法就像一座工厂,工厂接收你送来的原材料(能够用m.update()
为工厂运送原材料),通过加工返回的产品就是hash值python

二:将指定的 “字符串” 进行加密。使用hashlib的分步解析

1)在进行md5哈希运算前,须要对数据进行编码,不然报错

import hashlib
obj = hashlib.md5()   #构造一个hashlib的对象
obj.update("小马过河")  #update对指定字符串进行加密
print(obj)           
--------------结果:
  obj.update("小马过河")
TypeError: Unicode-objects must be encoded before hashing

2)obj是hash对象

import hashlib
obj = hashlib.md5()
obj.update("小马过河".encode("utf-8"))
print(obj,type(obj))
-------------------结果:
<md5 HASH object @ 0x001C5590> <class '_hashlib.HASH'>

3)

import hashlib
obj = hashlib.md5()
obj.update("小马过河".encode("utf-8"))
result=obj.hexdigest()
print(result)
--------------结果:
24f67b0f6d02adc8867d612e0e0fc40a

4)给加密增添难度

import hashlib
obj = hashlib.md5("mcw@xiaoma@aaaafffff".encode("utf-8"))  #添加一些内容,提升加密复杂度。此处的字符串也要先编码,
obj.update("小马过河".encode('utf-8'))
result = obj.hexdigest()
print(result)
-------------------结果:
b11740508f28e04837f2c0e3a58cf990

5)用hashlib作成加密函数(添加基础的字符了的)

import hashlib
def get_md5(data):   #传参为须要加密的字符串
    obj = hashlib.md5("sidrsicxwersdfsaersdfsdfresdy54436jgfdsjdxff123ad".encode('utf-8'))
    obj.update(data.encode('utf-8'))
    result = obj.hexdigest()          
    return result
val = get_md5('123')
print(val)
--------------结果:
35093270b6352fa9721370b781f7b4d7

三:应用场景案例:用户帐号密码登陆,对明文密码进行加密

import hashlib
USER_LIST = []
def get_md5(data):
    obj = hashlib.md5("12:;idrsicxwersdfsaersdfsdfresdy54436jgfdsjdxff123ad".encode('utf-8'))
    obj.update(data.encode('utf-8'))
    result = obj.hexdigest()
    return result
def register():
    print('**************用户注册**************')
    while True:
        user = input('请输入用户名:')
        if user == 'N':
            return
        pwd = input('请输入密码:')
        temp = {'username':user,'password':get_md5(pwd)}
        USER_LIST.append(temp)
def login():
    print('**************用户登录**************')
    user = input('请输入用户名:')
    pwd = input('请输入密码:')

    for item in USER_LIST:
        if item['username'] == user and item['password'] == get_md5(pwd):
            return True
register()
result = login()
if result:
    print('登录成功')
else:
    print('登录失败')
------------------------结果:
**************用户注册**************
请输入用户名:小马过河
请输入密码:123456
请输入用户名:N
**************用户登录**************
请输入用户名:小马过河
请输入密码:123456
登录成功

#用户登陆场景分析:实现用户注册,而后进行用户登陆的代码分析。算法

#代码分析:
一、用户登陆须要使用密码,密码必定要加密,保证用户的信息安全。
  1)加密可使用hashlib模块进行加密。
  2)加密能够写成加密函数
  3)提升密码解密的复杂性,代码中多加字符串。(加密算法虽然依然很是厉害,可是也存在缺陷,即:经过撞库能够反解。因此,有必要对加密算法中添加自定义key再来作加密。)
二、用户注册写成用户注册的函数,用户登陆写成用户登陆的函数。
三、先执行用户注册的函数,再执行用户登陆的函数
四、注册与登陆须要交互,用到input函数接收用户输入
五、若是用户注册和用户登陆用到死循环,那么就要判断用什么来终止循环(好比这里是输入N)
六、用户注册提交的密码加密的密文写入数据库。、用户注册提交的密码加密的密文写入数据库。
七、用户登陆输入的密码,使用相同加密函数加密后与数据库密文比对,相等就登陆,不然就失败
八、登陆的本质是判断从用户接收的加密后密文和注册时存入数据库的密文对比,用户名密文对比成功,则继续往下执行登陆后的操做。
九、用户输入密码要防止旁人看到,可使用getpass模块
十、与密码相关的很重要,必定要加密。包括本身拥有的影响大的重要数据也要加密,防止黑客入侵获取而泄密。数据库

四:校验文件的一致性(如何保证下载的文件过程当中不丢包,保证下载数据的完整性)

 

五:破解用户注册的密码

 

6、hmac模块的加密方式,与hashlib相似

 

 

参考连接:
https://www.cnblogs.com/sui776265233/p/9224754.html 男孩
https://www.cnblogs.com/breezey/p/6664733.html安全

查看连接:网络

https://blog.csdn.net/secret5/article/details/70150486app

相关文章
相关标签/搜索