Python學習筆記:MD5加密


MD5 算法嚴格上來說,不算是一種加密算法,而是一種哈希算法。

MD5 中沒有密鑰和密文的概念,沒有解密一說。

MD5 是一種有損壓縮,非對稱加密算法,無法進行還原。

網上關於 MD5 的解密大部分都是碼表匹對,而不是破解。

Python3 標准庫中,已經移除了 md5, 關於 hash 加密算法都放在 hashlib 標准庫中,例如:SHA1/SHA224/SHA256/SHA384/SHA512MD5 算法等。

hashlib 庫的 hash 算法中,提供眾多加密算法:

sha1()
sha224()
sha256()
sha384()
sha512()
blake2b()
blake2s()
md5()

這些方法通過統一接口返回一個對象。

一、針對英文md5加密

# 方法一
import hashlib
m = hashlib.md5()
m.update(b'123')
m.hexdigest() # '202cb962ac59075b964b07152d234b70'

# 方法二
hashlib.md5(b'123').hexdigest() # '202cb962ac59075b964b07152d234b70'

# 方法三
hashlib.new('md5', b'123').hexdigest() # '202cb962ac59075b964b07152d234b70'

二、針對中文md5加密

需先將中文轉換成 UTF-8 格式,再進行 md5 加密。

import hashlib
data = r'你好'
hashlib.md5(data.encode(encoding='UTF-8')).hexdigest() # '7eca689f0d3389d9dea66ae112e5cfd7'
'''
encoding='UTF-8'
encoding='GBK'
encoding='GB2312'
encoding='GB18030'
'''

三、hashlib函數解析

1.hashlib.new方法

一般性方法,使用語法為:

hashlib.new(name, [data])
# name 哈希加密算法名稱 例如:md5
# data 需要加密的數據 可忽略 在之后update時傳入數據即可

實例:

import hashlib
m = hashlib.new('md5')
m.update(b'123')
m.hexdigest() # '202cb962ac59075b964b07152d234b70'

2.hashlib.algorithms_guaranteed/algorithms_available方法

可以使用 hashlib.algorithms_guaranteed 或者 hashlib.algorithms_available 這兩個內置屬性查看 hashlib 支持哪些加密算法。

hashlib.algorithms_guaranteedhashlib.algorithms_available 的子集。

import hashlib
hashlib.algorithms_guaranteed
{'blake2b',
 'blake2s',
 'md5',
 'sha1',
 'sha224',
 'sha256',
 'sha384',
 'sha3_224',
 'sha3_256',
 'sha3_384',
 'sha3_512',
 'sha512',
 'shake_128',
 'shake_256'}

import hashlib
hashlib.algorithms_available
{'DSA',
 'DSA-SHA',
 'MD4',
 'MD5',
 'RIPEMD160',
 'SHA',
 'SHA1',
 'SHA224',
 'SHA256',
 'SHA384',
 'SHA512',
 'blake2b',
 'blake2s',
 'dsaEncryption',
 'dsaWithSHA',
 'ecdsa-with-SHA1',
 'md4',
 'md5',
 'ripemd160',
 'sha',
 'sha1',
 'sha224',
 'sha256',
 'sha384',
 'sha3_224',
 'sha3_256',
 'sha3_384',
 'sha3_512',
 'sha512',
 'shake_128',
 'shake_256',
 'whirlpool'}

3.hashlib.update方法

傳入參數對象以更新哈希對象。

該方法只支持 byte 類型,否則會報錯。

需要在參數前添加 b 進行類型轉換。

import hashlib
m = hashlib.md5()
m.update('123456')
# TypeError: Unicode-objects must be encoded before hashing

m.update(b'123456')

重復調用 update(arg) 方法,會將傳入的 arg 參數進行拼接,而不是覆蓋。

m.update(a); m.update(b) 等價於 m.update(a+b)

import hashlib
m = hashlib.md5()
m.update(b'123')
m.hexdigest() # '202cb962ac59075b964b07152d234b70'
m.update(b'456')
m.hexdigest() # 'e10adc3949ba59abbe56e057f20f883e'

hashlib.md5(b'123456').hexdigest() # 'e10adc3949ba59abbe56e057f20f883e'

為了防止每次拼接干擾,每次都需要重新實例化。

重新定義:md5 = hashlib.md5()

4.hashlib.hexdigest方法

hex 代表十六進制。

該方法將 hash 中的數據轉換成數據格式,其中只包含十六進制的數字。

四、針對DataFrame某列進行加密

先構造函數,再針對該列進行 apply 操作。

import hashlib

def md5_crypt(txt):
    m = hashlib.md5()
    m.update(str(txt).encode()) # 轉換為字符型 b
    return m.hexdigest()

data['nes_col'] = data['col'].apply(md5_crypt)

參考鏈接:python3中的md5加密

參考鏈接:python中的md5加密

參考鏈接:Python之md5.update才過的哪些坑

參考鏈接:Python中如何對某一段字符串進行md5加密


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM