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

相關文章
相關標籤/搜索