python中含有內置的函數去給對象生成哈希值,也就是hash()函數,這個函數將一個對象作為輸入,返回一個整數的hash值。
內部的,這個函數涉及到.\__hash\__()這個輸入對象的方法,所以呢,如果你想使你的自定義類可哈希化,你需要做的是實現.\__hash__()這個方法返回出一個整數,這個整數是基于你的對象的內部狀態(tài)決定的。
先開始一些基本的小例子,先對數值進行散列
>>>hash(1)
1
>>>hash(10)
10
>>>hash(10.00)
10
>>>hash(10.01)
230584300921368586
>>>hash(-10.01)
-230584300921368586
如果你好奇為什么這些hash值看起來有不同的長度,請記住在Python中hash()函數返回的是整數對象,他們都會在標準的64位Python解釋器中通過24字節(jié)呈現。
正如你可以看到的,整數的哈希值默認的就是它本身,不管你哈希的數據類型是什么,所以整數1和浮點數1.0哈希值都是1.
這個有什么特殊的么,這個展示了你之前學到的知識,也就是hash函數經常是單向的函數,如果兩個不同的對象具有相同的hash值,根本不可能做反向工程,也就是從hash值返回到原始的對象,這也就使得被hash的原始數據類型的信息被丟失。
另幾個有趣的可以關注的hash事情是,小數的散列值不同于它本身,負數具有負的哈希值。還有一點,就是如果兩個對象具有相同的哈希值,稱為哈希碰撞。
哈希一個字符串不同于對數值進行哈希。
>>>hash("BadBehaviour")
7164800052134507161
DOS攻擊(DOS代表拒絕服務)是指攻擊者故意耗盡計算機系統(tǒng)的資源,使系統(tǒng)不再能夠向客戶端提供服務的攻擊。在ScottCrosby演示的這個攻擊的具體案例中,攻擊可能會使目標系統(tǒng)充斥大量的數據,這些數據的哈希沖突導致目標系統(tǒng)使用更多的計算能力來解決沖突。
以上內容為大家介紹了Python里的hash()函數,希望對大家有所幫助,如果想要了解更多Python相關知識,請關注IT培訓機構:千鋒教育。