Python3 加密(hashlib / hmac)

本文由 Luzhuo 編寫,轉發請保留該信息. 
原文: http://blog.csdn.net/Rozol/article/details/72566661


以下代碼以Python3.6.1爲例 
Less is more! 
hashlib : 不可逆加密 
hmac : 不可逆鍵值對方式加密 
base64: 可逆加密


hashlib

#!/usr/bin/env python
# coding=utf-8
__author__ = 'Luzhuo'
__date__ = '2017/5/19'
# hash_demo.py Hash加密相關(安全哈希)
# 支持: MD5, SHA1 SHA224 SHA256 SHA384 SHA512


import hashlib


def hash_demo():
    m = hashlib.md5()
    m.update(b"hello")
    m.update(b"world!")  # = hello + world!

    hash_hex = hashlib.sha3_512(b"luzhuo.me").hexdigest()

    print(m.digest_size)
    print(m.digest())  # 二進制hash
    print(m.hexdigest())  # 十六進制hash
    print(hash_hex)

    # 加鹽加密
    hash_bytes = hashlib.pbkdf2_hmac('sha256', b'luzhuo.me', b'80', 100000)
    print(hash_bytes)



def hash_func():
    # hashlib.new(name[, data])  // 創建hashlib(非首選), name=算法名, data:數據
    hash = hashlib.new('ripemd160', b'luzhuo.me')

    # 常量
    dics = hashlib.algorithms_guaranteed  # 所有平臺支持的hash算法的名稱
    dics = hashlib.algorithms_available  # 在Python解析器中可用的hash算法的名稱, 傳遞給new()時, 可識別

    # hashlib.pbkdf2_hmac(hash_name, password, salt, iterations, dklen=None) // 加鹽加密 hash_name:hash名稱, password:數據, salt:鹽, iterations:循環次數, dklen:密鑰長度
    hash_bytes = hashlib.pbkdf2_hmac('sha256', b'luzhuo.me', b'80', 100000)

    # hash對象
    num = hash.digest_size  # hash結果的大小
    num = hash.block_size  # hash算法的內部塊的大小
    strs = hash.name  # hash名稱, 可傳給new()使用
    hash.update(b"data")  # 字節緩衝區 hash.update(a) hash.update(b) == hash.update(a+b)
    hash_bytes = hash.digest()  # 字節hash
    hash_str = hash.hexdigest()  # 16進制字符串hash
    hash = hash.copy()  # 拷貝hash對象副本



if __name__ == "__main__":
    hash_demo()

    # hash_func()


hmac

#!/usr/bin/env python
# coding=utf-8
__author__ = 'Luzhuo'
__date__ = '2017/5/19'
# hmac_demo.py HMAC算法
# 與hashlib不同之處在於多了key

import hmac


def hmac_demo():
    # 加密
    h = hmac.new(b"net")
    h.update(b"luzhuo.me")
    h_str = h.hexdigest()
    print(h_str)

    # 比較密碼
    boolean = hmac.compare_digest(h_str, hmac.new(b"net", b"luzhuo.me").hexdigest())
    print(boolean)



def hmac_func():
    # 創建key和內容,再都進行加密
    # hmac.new(key, msg=None, digestmod=None) // 創建新的hmac對象, key:鍵, msg:update(msg), digestmod:hash名稱(同hashlib.new())(默認md5)
    hc = hmac.new(b"key")

    # hmac對象
    hc.update(b"msg")  # 字節緩衝區  hc.update(a) hc.update(b) == hc.update(a+b)
    hash_bytes = hc.digest()  # 字節hash
    hash_str = hc.hexdigest()  # 16進制hash字符串
    hc = hc.copy()  # 拷貝hmac副本
    num = hc.digest_size  # hash大小
    num = hc.block_size  # hash算法內部塊大小
    strs = hc.name  # hash名稱
    # hmac.compare_digest(a, b) // 比較兩個hash密鑰是否相同, 參數可爲: str / bytes-like object, (注:建議使用,不建議使用a==b)
    boolean = hmac.compare_digest(hmac.new(b"net", b"luzhuo.me").digest(), hmac.new(b"net", b"luzhuo.me").digest())




if __name__ == "__main__":
    hmac_demo()

    # hmac_func()





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章