Python 中 MD5 哈希函數的實現

2021-02-19 Python數據科學


在本文中,我們將學習Python中的MD5加密,並詳細討論其含義和用法。包括以下內容:

什麼是MD5?

Python中的MD5哈希

與md5相關的功能
示例1:在Python中列印等效於MD5哈希的字節
示例2:在Python中列印MD5哈希的十六進位等效項
示例3:Python MD5文件校驗

輸出與說明
示例4:使用Python在MD5中編碼字符串

輸出與說明
示例5:在Python中計算文件的MD5哈希

輸出與說明

應用範圍

優點

缺點

結論

MD5代表消息摘要算法。它是一個哈希函數,可產生128位哈希值。可用作校驗和驗證數據完整性。它適用於非加密目的,例如確定分區資料庫中特定密鑰的分區。該哈希函數在Python的hashlib模塊中可用。它以字節序列作為輸入,並返回128位哈希值作為輸出。散列函數的主要用途是檢查數據完整性,但存在安全性問題。hexdigest():以十六進位格式返回編碼的數據示例1:在Python中列印等效於MD5哈希的字節
import hashlib 
 
result = hashlib.md5(b'Python Pool') 
print("Hash Value : ", end ="")
print(result)
print("Equivalent Byte : ", end ="") 
print(result.digest()) 

在此代碼中,我們採用字節輸入,這是哈希函數可接受的。然後,我們使用md5哈希函數對該值進行編碼。最後,我們使用digest()函數生成了編碼字符串的等效字節。示例2:在Python中列印MD5哈希的十六進位等效項
import hashlib 
 
result = hashlib.md5('Python Pool'.encode()) 
print("Hash Value : ", end ="")
print(result)
print("Hexadecimal Equivalent : ", end ="") 
print(result.hexdigest()) 

在這裡,我們使用encode()函數將字符串轉換為等效的字節,從而使其被哈希函數接受。然後,我們使用md5函數對其進行編碼,最後,使用hexdigest()函數顯示其十六進位等效項。
md5_hash = hashlib.md5()
 
file = open("test.txt", "rb")
content = file.read()
md5_hash.update(content)
 
result = md5_hash.hexdigest()
print(result)

在此代碼中,調用hashlib.md5()函數以創建MD5對象。我們以「 rb」模式打開了一個文件,其中rb代表「 read bytes」。使用read()方法,我們將文件的內容讀取到一個變量中。update()方法更新文件內容。最後,使用hexdigest()方法,我們將哈希值轉換為等效的十六進位值。
import hashlib 
string = "pythonpool.com"
encoded=string.encode()
result = hashlib.md5(encoded)
print("String : ", end ="")
print(string)
print("Hash Value : ", end ="")
print(result)
print("Hexadecimal equivalent: ",result.hexdigest())

在此示例中,我們使用hashlib.md5()函數將字符串值編碼為哈希值。然後,我們使用hexdigest()方法來獲取生成的哈希值的十六進位等效項。同樣,我們也可以使用digest()方法來獲取與生成的哈希值等效的字節。
import hashlib
 
with open("sample.txt","rb") as f:
    bytes = f.read()
    print("Bytes read from the file:",bytes)
    result = hashlib.md5(bytes)
    print("Hah Value: ",result)
    print("The hexadecimal equivalent: ")
    print(result.hexdigest())

在此代碼中,我們首先創建了一個示例文本文件。然後,我們以字節為單位讀取該文件的內容。我們將字節轉換為哈希值,然後最終看到相同的十六進位等效項。通過為在法律發現過程中交換的每個文檔提供唯一的標識符,它也可用於電子發現(對可能涉及到訴訟相關的電子證據的歸檔和再現)提供一個任意大小的安全輸入(如果使用128位,則可以產生輸出)在本文中,我們討論了python中的md5哈希函數。我們看到了相同的各種示例,還了解了它的各種應用。

我是東哥,最後給大家分享《100本Python電子書》,包括Python編程技巧、數據分析、爬蟲、Web開發、機器學習、深度學習。

現在免費分享出來,有需要的讀者可以下載學習,在下面的公眾號GitHuboy」裡回復關鍵字:Python,就行。

相關焦點

  • Python 中 MD5 加密
    Message Digest Algorithm MD5(中文名為消息摘要算法第五版)為計算機安全領域廣泛使用的一種散列函數,用以提供消息的完整性保護
  • MD5 簡介,及其在 Java 中的實現方式
    MD5 使用的是散列函數(也稱哈希函數),一定概率上也存在哈希衝突(也稱哈希碰撞),即多個不同的原數據對應一個相同的 MD5 值。不過,經過 MD4、MD3 等幾代算法的優化,MD5 已經充分利用散列的分散性高度避免碰撞的發生。可以看出,MD5 是一種不可逆的算法,也就說,你無法通過得到的 MD5 值逆向算出原數據內容。正是憑藉這些特點,MD5 被廣泛使用。
  • 什麼是一致性哈希算法
    4,JAVA實現一致性哈希算法的代碼分析設計哈希函數這裡採用了MD5算法,主要是用來保證平衡性,即能夠將機器均衡地映射到環上。貌似用Jdk中String類的hashCode並不能很好的保證平衡性。import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;/** 實現一致性哈希算法中使用的哈希函數,使用MD5算法來保證一致性哈希的平衡性
  • 詳解Python中的可哈希對象與不可哈希對象(二)
    對於不可變類型而言,不同的值意味著不同的內存,相同的值存儲在相同的內存,如果將我們的不可變對象理解成哈希表中的Key,將內存理解為經過哈希運算的哈希值Value,這不正好滿足哈希表的性質嘛。如果一個對象是可哈希的,那麼在它的生存期內必須不可變(而且該對象需要一個哈希函數),而且可以和其他對象比較(需要比較方法).比較值相同的對象一定有相同的哈希值,即一個對象必須要包含有以下幾個魔術方法:前面既然說了整數int是可哈希對象,不放我們看一下它具不具備這幾個魔術方法:In [51]: a=100In [52]: dir(a)Out
  • 是哈希不是嘻哈,你真的了解散列嗎?理解Python中可哈希對象概念
    首先,我們定義了兩個列表a、b;然後我們將a、b放入集合s中,試圖實現當a、b集合相等時,集合s中只保留一個列表。(這種需求是不是很常見?)最後,程序出現了異常,TypeError unhashable type: 'list',說我們的列表不是一個可以哈希的對象。那麼,問題來了,什麼是可哈希對象呢?
  • 哈希函數
    先簡單說說函數的根本含義 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄函數f,根本上說,是從一個集合A到另一個集合B接下來,理解哈希函數的根本含義 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄前面講的查找方法,不管是靜態查找還是動態查找,其根本思想是將待查的關鍵字key與表中元素的關鍵字相比較,根據比較的結果得出查找成功或不成功
  • 科普 | 哈希函數的過去、現在與未來
    以下文章來源於以太坊愛好者 翻譯&校對: 閔敏 & 阿劍科普 | 哈希函數的過去、現在與未來哈希值和哈希函數的概念是初次入門區塊鏈的人常聽到的兩個關鍵詞
  • Python內置模塊hashlib與hmac介紹
    # 導入模塊import hashlibimport hmac# hashlib加密# hashlib 是python
  • 哈希函數和哈希表
    比如「aa1」、"aa2"經過hash後可能結果會相差很多,當一個哈希函數的輸出在S中是均勻的,那麼我們將輸出值對m取餘(%m),就會將不定長輸入映射到0~m-1空間中,並且在這個空間也保持均勻分布!哈希表就是這麼做的,一會再說!
  • PHP程式設計師:6年前都告訴過你md5密碼不安全,直到今天你還在犯錯
    引言作為php開發人員,很長一段時間以來,很多人一直在使用md5哈希算法來保護密碼數據並生成唯一的哈希算法。但是你應該或多或少聽到過,md5不再安全了!PHP 5.5中有一些密碼身份驗證替代方案,即 sha1,password_hash?為什麼被認為更安全?應該怎麼選擇?學習時間很多研究論文已經證明過了,md5 計算出的哈希值可以被逆向。我們也應該完全停止使用。
  • 一文搞懂負載均衡中的一致性哈希算法
    不同領域場景不同,需要顧及的因素也有所差異,本文主要討論在負載均衡中一致性哈希算法的設計。在介紹一致性哈希算法之前,我將會介紹一些哈希算法,討論它們的區別和使用場景。也會給出一致性哈希算法的 Java 通用實現,可以直接引用,文末會給出 github 地址。
  • 什麼是哈希算法
    哈希,英文是 hash ,本來意思是」切碎並攪拌「,有一種食物就叫 Hash ,就是把食材切碎並攪拌一下做成的。哈希函數的運算結果就是哈希值,通常簡稱為哈希。哈希函數有時候也翻譯做散列函數。所以,哈希函數的安全性肯定是個相對概念。如果出現了兩個不同輸入有相同輸出的情況,就叫碰撞,collision 。不同的哈希算法,哈希位數越多,也就基本意味著安全級別越高,或者說它的」抗碰撞性「就越好。再來說說哈希函數的主要作用。
  • 圖解:什麼是哈希?
    哈希函數用於將一個大數(手機號碼)或字符串映射為一個可以作為哈希表索引的較小整數的函數。比如活動開發中經常使用的 MD5 和 SHA 都是歷史悠久的Hash算法。由於哈希函數的原理是將輸入空間的一個較大的值映射成 hash 空間內一個較小的值,那麼就會出現兩個不同的輸入值被映射到了同一個較小的輸出值。當一個新插入的值被哈希函數映射到了哈希表中一個已經被佔用的槽,就認為產生了 Hash 碰撞(衝突)。那麼這種衝突是否可以避免呢?
  • Python | Leetcode哈希表系列
    哈希表哈希表(散列表)的思想是將關鍵字 Key 映射到存放記錄的散列表中從而進行快速訪問,其中映射函數 f(key) 稱為哈希函數(散列函數),依據哈希函數建立的查找表稱為哈希表。self.items[hash(k)] = v    def get(self,k):        hashcode=hash(k)        return self.items[hashcode]這個哈希函數十分簡單,但簡單不妨礙它成為一個哈希函數,事實上,它叫直接定址法,是一個線性函數:
  • 一日一技:在Python中使用過濾函數filter
    例如,如果列表裡面的元素不是字符串,那麼先把元素轉換為字符串,然後轉換為bytes型數據,計算md5值。如果md5值轉換成10進位數以後是3的倍數,那麼就把這個數篩選出來。為了實現這個目的,我們可以定義一個函數:import hashlibdef check(value): value_str = str(value) value_hex = str(hashlib.md5(value_str.encode()).hexdigest()) value_decimal
  • 一文讀懂哈希函數
    哈希函數哈希函數(Hash):h=H(Data)定義哈希函數H,將可變大小的數據Data作為輸入,產生固定長度的h值。
  • 小學生也能看懂的哈希函數工作原理
    這是一篇哈希函數/散列函數(hash function)的基礎入門,相信點進這篇教程的朋友都是想對哈希函數的基本概念和它的工作原理有基本了解的人。本文的目的是從一般的意義上去解釋它,因此我將省略到論證與具體的實現,而將重點放在高級原則上。
  • 如何用Python實現一個你問我答的翻譯機器人?
    Sign是籤名,使用md5算法生成的32位籤名,如下。from random import randintfrom hashlib import md5salt = randint(32768, 65536)myu = appid + w + str(salt) + secretKeym1 = md5()m1.update(myu.encode('utf-8'))
  • 理解數字籤名、加密通信的關鍵:哈希算法
    哈希函數的運算結果就是哈希值,通常簡稱為哈希。哈希函數有時候也翻譯做散列函數。  不同的哈希算法,哈希位數越多,也就基本意味著安全級別越高,或者說它的」抗碰撞性「就越好。  再來說說哈希函數的主要作用。哈希的獨一無二性,保證了如果數據在存儲或者傳輸過程中有絲毫損壞,那麼它的哈希就會變。哈希函數的最常見的一個作用就是進行完整性校驗( Integrity Check ),完整的意思是數據無損壞。
  • 哈希函數的特點及應用介紹
    原本呢,我是計劃在第二篇就開始進入程序開發的部分,只是我發現到,不先了解哈希函數的原理功能、或是留給讀者自行google,會破壞這個系列文章的完整性,尤其是在實作內存塊鏈的不可逆性、或是Key創建等功能,讀者的感受與理解會有差異,所以還是決定,在進入開發區塊鏈之前,寫一篇文章來專門介紹哈希函數,尤其是其在密碼學方面的應用 哈希函數應用在區塊鏈的哪些地方?