您好,登錄后才能下訂單哦!
這篇文章主要介紹“Python中hash加密方法怎么使用”,在日常操作中,相信很多人在Python中hash加密方法怎么使用問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Python中hash加密方法怎么使用”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
散列算法(Hash Algorithm),又稱哈希算法,雜湊算法,是一種從任意文件中創造小的數字「指紋」的方法。與指紋一樣,散列算法就是一種以較短的信息來保證文件唯一性的標志,這種標志與文件的每一個字節都相關,而且難以找到逆向規律。因此,當原有文件發生改變時,其標志值也會發生改變,從而告訴文件使用者當前的文件已經不是你所需求的文件
Hash簡單點講就是把任意一段數據經過某種算法生成一段唯一的固定長度的數據
也可以把哈希值當做是文件指紋,因為它是文件唯一性的標志,與每一個字節都有關,當文件發生改變是,指紋值也會改變
如果把hash算法比喻為一座工廠
那傳給hash算法的內容就是原材料
生成的hash值就是生產出的產品
正向快速:給定明文和 Hash 算法,在有限時間和有限資源內能計算得到 Hash 值
只要傳入的內容一樣,得到的hash值必然一樣
逆向困難:給定 Hash 值,在有限時間內很難逆推出明文
輸入敏感:原始輸入信息發生任何變化,新的 Hash 值都應該出現很大變化
沖突避免:很難找到兩段內容不同的明文,使得它們的 Hash 值一致
長度固定:只要我們使用是hash算法固定,無論傳入的內容有多大,得到的hash值的長度是固定
信息摘要:hash只是信息的摘要,信息指紋,是用來做數據識別的
常見 Hash 算法有 MD5 和 SHA 系列,目前 MD5 和 SHA1 已經被破解,一般推薦至少使用 SHA2-256 算法
哈希算法 | 輸出長度(bit) | 輸出長度(字節) |
---|---|---|
MD5 | 128 bit | 16 bytes |
RipeMD160 | 160 bits | 20 bytes |
SHA-1 | 160 bits | 20 bytes |
SHA-256 | 256 bits | 32 bytes |
SHA-512 | 512 bits | 64 bytes |
稍微想一下就可以發現,既然輸入數據長度不固定,而輸出的哈希值卻是固定長度的,這意味著哈希值是一個有限集合,而輸入數據則可以是無窮多個,那么建立一對一關系明顯是不現實的。所以“碰撞”是必然會發生的,所以一個成熟的哈希算法會有較好的抗沖突性,同時在實現哈希表的結構時也要考慮到哈希沖突的問題
比如“666”經過 Hash 后是“fae0b27c451c728867a567e8c1bb4e53”,相同 Hash 算法得到的值是一樣的。比如 WiFi 密碼如果是 8 位純數字的話,頂多就是 99999999 種可能性,破解這個密碼需要做的就是提前生成好 0 到 1 億數字的 Hash 值,然后做 1 億次布爾運算(就是 Bool 值判斷,0 或者 1),而現在普通 I5 四核 CPU 每秒能到達 200 億次浮點數計算,做 1 億次布爾運算也就是秒級別的時間就破解了
8位大小寫字母、數字、特殊符號組成的密碼,若按照MD5加密,則hash值大概10000千億,i9算力每秒1千億。也需要至少24h。這只是極端情況下,如果加上加密算法不確定(比如3),請求時間(比如3),查詢時間(比如3),這就已經需要半年左右,倘若再加上錯誤等待時間(比如輸入5次錯誤等待24小時),那就已經需要50年。。。
當然,如果有三萬臺電腦同時破解,也還是一天 -_-|||。
不過道高一尺,魔高一丈。誰又會傻乎乎的一個站著打一個等著挨。都是相對的
所以密碼盡量不要用純數字,因為根本沒有任何安全性
對數字內容進行 Hash 運算,獲取唯一的摘要值來指代原始完整的數字內容,利用 Hash 函數的抗碰撞性來確保內容未被篡改
常用于用戶名和密碼來確保用戶信息安全,為了防止攻擊會采用加鹽的方法,就是原來的明文加上一個隨機數之后的 Hash 值,Hash 值和鹽會保存在兩個地方,只要不是同時泄漏就很難被破解
如果在Python中需要對用戶輸入的密碼或者其他內容進行加密,首選的方法是生成hash值
在Python中可以利用二個模塊來進行:
crypth
ashlib
使用:hashlib.md5()
名稱 | 描述 |
---|---|
md5(…) | 利用md5算法加密 |
sha1(…) | 利用sha1算法加密 |
sha224(…) | 利用sha224算法加密 |
sha256(…) | 利用sha256算法加密 |
sha384(…) | 利用sha384算法加密 |
sha512(…) | 利用sha512算法加密 |
如果你利用hashlib
生成了一個Hash對象,那么這個Hash對象會包含如下方法
名稱 | 描述 |
---|---|
update(arg) | 可以重復利用指定了特殊加密算法的Hash對象,對arg 進行加密 |
digest(…) | 以字符形式返回加密內容 |
hexdigest(…) | 以16進制形式返回加密內容 |
copy(…) | 為了達到重復利用Hash對象的目的,而克隆Hash對象 |
直接使用hashlib方法
import hashlib hashlib.sha224("Nobody inspects the spammish repetition".encode("utf-8")) # 加密 hashlib.sha224("Nobody inspects the spammish repetition".encode("utf-8")).hexdigest() # 返回加密內容
直接使用Hash對象中的方法
import hashlib # 造出工廠 m = hashlib.md5() # 放入原料 m.update("Nobody inspects".encode('utf-8')) # 產出hash值 m.digest() m.update("the spammish repetition".encode("utf-8")) m.digest() m.hexdigest()
import hashlib # 造出工廠 m = hashlib.md5("this is salt".encode("utf-8")) # 放入原料 m.update("Nobody inspects".encode('utf-8')) # 產出hash值 m.digest() m.update("the spammish repetition".encode("utf-8")) m.digest() m.hexdigest()
主要方法
名稱 | 類型 | 描述 |
---|---|---|
crypt(…) | 方法 | 對指定內容進行hash加密 |
mksalt(…) | 方法 | 根據加密算法生成salt |
methods | list | 返回可用加密算法的列表 |
MOTHOD_CRYPT | 常量 | 加密算法 |
METHOD_MD5 | 常量 | md5加密算法 |
METHOD_SHA256 | 常量 | sha256加密算法 |
METHOD_SHA512 | 常量 | sha512加密算法 |
使用crypt.crypt(…)進行hash加密的時候,需要提供二個參數:
加密內容
salt
import crypt salt = crypt.mksalt(crypt.METHOD_SHA512) hash = crypt.crypt("helloworld",salt)
m=hashlib.md5() m.update('key'.encode('utf-8')) #添加個其他元素,提升密碼復雜度,不是加鹽 m.update(password.encode('utf-8')) print(m.hexdigest())
m = hashlib.md5() with open(r'E:\01.mp4','rb') as f: for line in f: m.update(line) print(m.hexdigest)
到此,關于“Python中hash加密方法怎么使用”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。