2020 2 15 Python學習計畫

2022-08-12 03:15:22 字數 2293 閱讀 8454

要演算法又稱雜湊演算法、雜湊演算法。它通過乙個函式,把任意長度的資料轉換為乙個長度固定的資料串(通常用16進製制的字串表示)。

摘要演算法就是通過摘要函式f()對任意長度的資料data計算出固定長度的摘要digest,目的是為了發現原始資料是否被人篡改過。

摘要演算法之所以能指出資料是否被篡改過,就是因為摘要函式是乙個單向函式,計算f(data)很容易,但通過digest反推data卻非常困難。而且,對原始資料做乙個bit的修改,都會導致計算出的摘要完全不同。

import hashlib

md5 = hashlib.md5()

md5.update('how to use md5 in python hashlib?'.encode('utf-8'))

print(md5.hexdigest())

如果資料量很大,可以分塊多次呼叫update(),最後計算的結果是一樣的。

由於常用口令的md5值很容易被計算出來,所以,要確保儲存的使用者口令不是那些已經被計算出來的常用口令的md5,這一方法通過對原始口令加乙個複雜字串來實現,俗稱「加鹽」。

經過salt處理的md5口令,只要salt不被黑客知道,即使使用者輸入簡單口令,也很難通過md5反推明文口令。

但是如果有兩個使用者都使用了相同的簡單口令比如123456,在資料庫中,將儲存兩條相同的md5值,這說明這兩個使用者的口令是一樣的。有沒有辦法讓使用相同口令的使用者儲存不同的md5呢?

如果假定使用者無法修改登入名,就可以通過把登入名作為salt的一部分來計算md5,從而實現相同口令的使用者也儲存不同的md5。

通過雜湊演算法,我們可以驗證一段資料是否有效,方法就是對比該資料的雜湊值,例如,判斷使用者口令是否正確,我們用儲存在資料庫中的password_md5對比計算md5(password)的結果,如果一致,使用者輸入的口令就是正確的。

為了防止黑客通過彩虹表根據雜湊值反推原始口令,在計算雜湊的時候,不能僅針對原始輸入計算,需要增加乙個salt來使得相同的輸入也能得到不同的雜湊,這樣,大大增加了黑客破解的難度。

如果salt是我們自己隨機生成的,通常我們計算md5時採用md5(message + salt)。但實際上,把salt看做乙個「口令」,加salt的雜湊就是:計算一段message的雜湊時,根據不通口令計算出不同的雜湊。要驗證雜湊值,必須同時提供正確的口令。

這實際上就是hmac演算法:keyed-hashing for message authentication。它通過乙個標準演算法,在計算雜湊的過程中,把key混入計算過程中。

和我們自定義的加salt演算法不同,hmac演算法針對所有雜湊演算法都通用,無論是md5還是sha-1。採用hmac替代我們自己的salt演算法,可以使程式演算法更標準化,也更安全。

chain()可以把一組迭代物件串聯起來,形成乙個更大的迭代器。

groupby()把迭代器中相鄰的重複元素挑出來放在一起。

在python中,讀寫檔案這樣的資源要特別注意,必須在使用完畢後正確關閉它們。正確關閉檔案資源的乙個方法是使用try...finally。

try:

f = open('/path/to/file', 'r')

f.read()

finally:

if f:

f.close()

try...finally非常繁瑣。python的with語句允許我們非常方便地使用資源,而不必擔心資源沒有關閉,所以上面的**可以簡化為

with open('/path/to/file', 'r') as f:

f.read()

urllib的request模組可以非常方便地抓取url內容,也就是傳送乙個get請求到指定的頁面,然後返回http的響應。

如果要以post傳送乙個請求,只需要把引數data以bytes形式傳入。

如果還需要更複雜的控制,比如通過乙個proxy去訪問**,我們需要利用proxyhandler來處理。

urllib提供的功能就是利用程式去執行各種http請求。如果要模擬瀏覽器完成特定功能,需要把請求偽裝成瀏覽器。偽裝的方法是先監控瀏覽器發出的請求,再根據瀏覽器的請求頭來偽裝,user-agent頭就是用來標識瀏覽器的。

Python 學習記錄 2020 2 15

關於 print函式 print的語法 print objects,sep end n file sys.stdout,flush false 無返回值 objects 複數,表示可以一次輸出多個物件。輸出多個物件時,需要用 分隔。sep 用來間隔多個物件,預設值是乙個空格。end 用來設定以什麼結...

學習 Python學習(一) Python問答

一.為什麼要使用python?python的主要特點有 1 軟體質量,python 具有很強的可讀性,因此在重用和維護方面就比較方便 2 編碼效率,python沒有編譯和鏈結庫的過程 3 程式移植性,不做任何修改,python可執行在windows和linux系統 4 豐富的支撐庫,python既可...

python學習清單大全 python學習清單

學習單子 a部 python 大神vamei的blog之python篇 大神vamei的部落格很是推薦 各方面寫的都很好 我暫時只是看過他的python 網路和django的部分,看下來簡單易懂,很適合做個學習的大綱,然後靠自己日後不斷的充實進去。文章中也簡要的列出常用的一些命令語法之類的。pyth...