1. 什么是可哈希(hashable)
屯溪ssl適用于網站、小程序/APP、API接口等需要進行數據傳輸應用場景,ssl證書未來市場廣闊!成為創新互聯公司的ssl證書銷售渠道,可以享受市場價格4-6折優惠!如果有意向歡迎電話聯系或者加微信:13518219792(備注:SSL證書合作)期待與您的合作!
簡要的說,可哈希的數據類型,即不可變的數據結構(字符串str、元組tuple、對象集objects)。
2. 哈希有什么作用
它是一個將大體量數據轉化為很小數據的過程,甚至可以僅僅是一個數字,以便我們可以用在固定的時間復雜度下查詢它,所以,哈希對高效的算法和數據結構很重要。
3. 什么是不可哈希(unhashable)
同理,不可哈希的數據類型,即可變的數據結構 (字典dict,列表list,集合set)。
4. hash(object)
hash() 用于獲取取一個對象(字符串或者數值等)的哈希值。返回對象的哈希值。
1. 簡介
哈希(hash)也翻譯作散列。Hash算法,是將一個不定長的輸入,通過散列函數變換成一個定長的輸出,即散列值。
這種散列變換是一種單向運算,具有不可逆性即不能根據散列值還原出輸入信息,因此嚴格意義上講Hash算法是一種消息摘要算法,不是一種加密算法。常見的hash算法有:SM3、MD5、SHA-1等 。
2. 應用
Hash主要應用在數據結構以及密碼學領域。
在不同的應用場景下,hash函數的選擇也會有所側重。比如在管理數據結構時,主要要考慮運算的快速性,并且要保證hash均勻分布;而應用在密碼學中就要優先考慮抗碰撞性,避免出現兩段不同明文hash值相同的情況發生。
2.1 在密碼學領域的應用
在密碼學中,Hash算法的作用主要是用于消息摘要和簽名,換句話說,它主要用于對整個消息的完整性進行校驗。比如一些登陸網站并不會直接明文存儲用戶密碼,存儲的是經過hash處理的密碼的摘要(hash值),當用戶登錄時只需要對比輸入明文的摘要與數據庫存儲的摘要是否相同;即使黑客入侵或者維護人員訪問數據庫也無法獲取用戶的密碼明文,大大提高了安全性。
2.2 在數據結構中的應用
使用Hash算法的數據結構叫做哈希表,也叫散列表,主要是為了提高查詢的效率。它通過把關鍵碼值映射到表中一個位置來訪問記錄,以加快查找的速度。這個映射函數就是hash函數,存放記錄的數組叫做哈希表。在數據結構中應用時,有時需要較高的運算速度而弱化考慮抗碰撞性,可以使用自己構建的哈希函數。
3. hash()
①相同的數值,不同的類型,哈希值相同
>>> n = hash(1)
>>> n
1
>>> n = hash(1.0)
>>> n
1
②相同字符串在同一次運行時的哈希值是相同的,但是不同次運行的哈希值不同
Python 3.7.2 (tags/v3.7.2:9a3ffc0492, Dec 23 2018, 23:09:28) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> m = hash('Vivian')
>>> m
- # 第一次哈希值
>>> exit()
C:\Users\Administrator>python
Python 3.7.2 (tags/v3.7.2:9a3ffc0492, Dec 23 2018, 23:09:28) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> m = hash('Vivian')
>>> m
# 第二次哈希值
這是由于Python的字符串hash算法有一個啟動時隨機生成secret prefix/suffix的機制,存在隨機化現象:對同一個字符串輸入,不同解釋器進程得到的hash結果可能不同。因此當需要做可重現可跨進程保持一致性的hash,需要用到hashlib模塊。
hashlib提供了常見的摘要算法,如MD5,SHA1等等
注:coding:utf-8
'''
學習中遇到問題沒人解答?小編創建了一個Python學習交流群:
尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書!
'''
import hashlib
# md5
m = hashlib.md5()
m.update(b'Vivian')
print(m.digest()) # 返回二進制的哈希值 b'\xe5if5\x05\x02\x1a!wR\xd6\xfa(\xae\r\xcb'
print(m.hexdigest()) # 返回十六進制的哈希值 ead6fa28ae0dcb
m.update('你好'.encode('utf-8'))
print(m.hexdigest()) # 6ea8d7a29ea0706bdaca285e1d2ddd17
# m兩次加密后的值 等于 兩次字串拼接后一次加密的值
n = hashlib.md5()
n.update('Vivian你好'.encode('utf-8'))
print(n.hexdigest()) # 6ea8d7a29ea0706bdaca285e1d2ddd17
# sha1
m = hashlib.sha1()
m.update(b'Vivian')
print(m.hexdigest()) # 587bf2d7314da0aebed16db2768be
# sha256
m = hashlib.sha256()
m.update(b'Vivian')
print(m.hexdigest()) # 2f7caf725fb93a456ebdf98be62f6e7ca99bc4e0b4a1993bf9e5c0
# sha512
m = hashlib.sha512()
m.update(b'Vivian')
print(m.hexdigest())
# d75e73edd6ab1801e3dbfcd5c504dca16f3c252fda7fdddc9badb6f86de29d3f9a6d07d2c93a53d6c9de9b548b8697f3cdc
標題名稱:Python3教程:加密模塊-hashlib
網頁地址:http://m.kartarina.com/article14/dsoggge.html
成都網站建設公司_創新互聯,為您提供營銷型網站建設、手機網站建設、小程序開發、靜態網站、網站設計公司、Google
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯