把任意長度的輸入(又叫作預映射pre-image)經過散列算法變換成固定長度的輸出,該輸出就是散列值。python
簡單的說就是一種將任意長度的消息壓縮到某一固定長度的消息摘要的函數。算法
1 >>>hash('test') # 字符串 2 2314058222102390712 3 >>> hash(1) # 數字 4 1 5 >>> hash(str([1,2,3])) # 集合 6 1335416675971793195 7 >>> hash(str(sorted({'1':1}))) # 字典 8 7666464346782421378 9 >>>
在 hash() 對對象使用時,所得的結果不只和對象的內容有關,還和對象的 id(),也就是內存地址有關。函數
1 class Test: 2 def __init__(self, i): 3 self.i = i 4 for i in range(10): 5 t = Test(1) 6 print(hash(t), id(t)) 7 #輸出結果 8 (277855628, 4445690048) 9 (277855637, 4445690192) 10 (277855628, 4445690048) 11 (277855637, 4445690192) 12 (277855628, 4445690048) 13 (277855637, 4445690192) 14 (277855628, 4445690048) 15 (277855637, 4445690192) 16 (277855628, 4445690048) 17 (277855637, 4445690192)
一種用途:spa
hash() 函數的對象字符無論有多長,返回的 hash 值都是固定長度的,也用於校驗程序在傳輸過程當中是否被第三方(木馬)修改,code
若是程序(字符)在傳輸過程當中被修改hash值即發生變化,若是沒有被修改,則 hash 值和原始的 hash 值吻合,對象
只要驗證 hash 值是否匹配便可驗證程序是否帶木馬(病毒)。blog
1 name1='正常程序代碼' 2 name2='正常程序代碼帶病毒' 3 print(hash(name1)) # 2403189487915500087 4 print(hash(name2)) # -8751655075885266653