Python 標準庫base64、hmac、hashlib的基本使用

base64

import base64  # Base64是一種用64個字符來表示任意二進制數據的方法。常用於在URL、Cookie、網頁中傳輸少量二進制數據。

encode_val = base64.b64encode('test ak47'.encode())  # 將bytes類型轉換成base64類型 返回一個bytes類型
decode_val = base64.b64decode(encode_val)  # 將得到的值進行解碼 可以是字符串類型

print(encode_val, type(encode_val), decode_val.decode())

hmac

import hmac # hmac模塊實現了標準的Hmac算法。


def test_md5_hmac():
    msg = 'test'.encode() # 將傳入的參數轉成bytes類型
    key = 'mykey'.encode() # 將key轉成bytes類型 這個過程也成加鹽
    # hm = hmac.new(key, msg, digestmod='MD5') # 使用md5的方法計算
    # return hm.hexdigest()
    hm = hmac.new(key)  # 加鹽操作
    hm.update(msg)  # 類似hashlib 計算數據
    return hm.hexdigest()


if __name__ == "__main__":
    pass_md5 = test_md5_hmac()
    print(pass_md5, type(pass_md5), len(pass_md5))

hashlib

import hashlib  # hashlib提供了常見的摘要算法:摘要算法又稱哈希算法、散列算法。它通過一個函數,把任意長度的數據轉換爲一個長度固定的數據串(通常用16進制的字符串表示)。
'''
摘要算法就是通過摘要函數f()對任意長度的數據data計算出固定長度的摘要digest,目的是爲了發現原始數據是否被人篡改過。
舉個例子,你寫了一篇文章,內容是一個字符串'how to use python hashlib - by Michael',並附上這篇文章的摘要是'2d73d4f15c0db7f5ecb321b6a65e5d6d'。
如果有人篡改了你的文章,並發表爲'how to use python hashlib - by Bob',你可以一下子指出Bob篡改了你的文章,因爲根據'how to use python hashlib - by Bob'計算出的摘要不同於原始文章的摘要。
摘要算法之所以能指出數據是否被篡改過,就是因爲摘要函數是一個單向函數,計算f(data)很容易,但通過digest反推data卻非常困難。而且,對原始數據做一個bit的修改,都會導致計算出的摘要完全不同。
'''

def test_sha256(password):
    # 利用sha256生成密碼
    h = hashlib.sha256() # 創建一個實例
    # h.update(password.encode('utf-8')) # 開始處理數據,接受一個bytes類型的值
    # 對數據進行加鹽處理,爲什麼要這樣做,對呀密碼進行加密的時候 可能會出現使用123456 111111 password等簡單密碼,因爲算法生成得到的值永遠是一樣的
    # 所以有可能會被有心人士輕鬆的對比出來,所以我們進行加鹽操作後,只有對方不知道我們加的值是什麼,那麼對方就無法得到加密數據的明文值
    h.update((password + '-mykey').encode('utf-8'))
    # h_result = h.hexdigest() # 得出計算結果 返回一個16進制字符串
    h_result = h.digest() # 得出計算結果 返回一個bytes類型
    return h_result

def test_md5():
    # 利用md5生成密碼
    h = hashlib.md5()
    # 當需要計算的數據過大時 可以拆分計算 得到的結果任然是一樣的
    h.update('1234'.encode('utf-8'))
    h.update('56'.encode('utf-8'))
    h_result = h.hexdigest()
    return h_result


if __name__ == "__main__":
    pass_sha256 = test_sha256('123456')
    pass_md5 = test_md5()
    print(pass_sha256, type(pass_sha256), len(pass_sha256))
    print(pass_md5, type(pass_md5), len(pass_md5))
    # print(dir(hashlib))
    import chardet
    # 使用 chardet 猜測bytes的編碼
    print(chardet.detect(pass_sha256))
發佈了264 篇原創文章 · 獲贊 202 · 訪問量 110萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章