欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python3 加密(hashlib和hmac)模塊的實(shí)現(xiàn)

 更新時(shí)間:2017年11月23日 14:15:05   作者:LZ_Luzhuo  
本篇文章主要介紹了Python3 加密(hashlib / hmac)模塊的實(shí)現(xiàn),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

以下代碼以Python3.6.1為例

  1. hashlib : 不可逆加密
  2. hmac : 不可逆鍵值對(duì)方式加密

hashlib模塊簡(jiǎn)介:

hashlib模塊為不同的安全哈希/安全散列(Secure Hash Algorithm)和 信息摘要算法(Message Digest Algorithm)實(shí)現(xiàn)了一個(gè)公共的、通用的接口,也可以說(shuō)是一個(gè)統(tǒng)一的入口。因?yàn)閔ashlib模塊不僅僅是整合了md5和sha模塊的功能,還提供了對(duì)更多中算法的函數(shù)實(shí)現(xiàn),如:MD5,SHA1,SHA224,SHA256,SHA384和SHA512。

hashlib模塊使用步驟:

1)獲取一個(gè)哈希算法對(duì)應(yīng)的哈希對(duì)象(比如名稱(chēng)為hash): 可以通過(guò) hashlib.new(哈希算法名稱(chēng), 初始出入信息)函數(shù),來(lái)獲取這個(gè)哈希對(duì)象,如hashlib.new('MD5', 'Hello'),hashlib.new('SHA1', 'Hello')等;也可以通過(guò)hashlib.哈希算法名稱(chēng)()來(lái)獲取這個(gè)哈希對(duì)象,如hashlib.md5(), hashlib.sha1()等。

2)設(shè)置/追加輸入信息: 調(diào)用已得到哈希對(duì)象的update(輸入信息)方法可以設(shè)置或追加輸入信息,多次調(diào)用該方法,等價(jià)于把每次傳遞的參數(shù)憑借后進(jìn)行作為一個(gè)參數(shù)墊底給update()方法。也就是說(shuō),多次調(diào)用是累加,而不是覆蓋。

3)獲取輸入信息對(duì)應(yīng)的摘要: 調(diào)用已得到的哈希對(duì)象的digest()方法或hexdigest()方法即可得到傳遞給update()方法的字符串參數(shù)的摘要信息。digest()方法返回的摘要信息是一個(gè)二進(jìn)制格式的字符串,其中可能包含非ASCII字符,包括NUL字節(jié),該字符串長(zhǎng)度可以通過(guò)哈希對(duì)象的digest_size屬性獲??;而hexdigest()方法返回的摘要信息是一個(gè)16進(jìn)制格式的字符串,該字符串中只包含16進(jìn)制的數(shù)字,且長(zhǎng)度是digest()返回結(jié)果長(zhǎng)度的2倍,這可用郵件的安全交互或其它非二進(jìn)制的環(huán)境中。

#!/usr/bin/env python
# coding=utf-8
__author__ = 'Luzhuo'
__date__ = '2017/5/19'
# hash_demo.py Hash加密相關(guān)(安全哈希)
# 支持: 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()) # 二進(jìn)制hash
  print(m.hexdigest()) # 十六進(jìn)制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]) // 創(chuàng)建hashlib(非首選), name=算法名, data:數(shù)據(jù)
  hash = hashlib.new('ripemd160', b'luzhuo.me')

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

  # hashlib.pbkdf2_hmac(hash_name, password, salt, iterations, dklen=None) // 加鹽加密 hash_name:hash名稱(chēng), password:數(shù)據(jù), salt:鹽, iterations:循環(huán)次數(shù), dklen:密鑰長(zhǎng)度
  hash_bytes = hashlib.pbkdf2_hmac('sha256', b'luzhuo.me', b'80', 100000)

  # hash對(duì)象
  num = hash.digest_size # hash結(jié)果的大小
  num = hash.block_size # hash算法的內(nèi)部塊的大小
  strs = hash.name # hash名稱(chēng), 可傳給new()使用
  hash.update(b"data") # 字節(jié)緩沖區(qū) hash.update(a) hash.update(b) == hash.update(a+b)
  hash_bytes = hash.digest() # 字節(jié)hash
  hash_str = hash.hexdigest() # 16進(jìn)制字符串hash
  hash = hash.copy() # 拷貝hash對(duì)象副本

 

if __name__ == "__main__":
  hash_demo()

  # hash_func()

hashmac模塊簡(jiǎn)介:

前面說(shuō)過(guò),HMAC算法也是一種一種單項(xiàng)加密算法,并且它是基于上面各種哈希算法/散列算法的,只是它可以在運(yùn)算過(guò)程中使用一個(gè)密鑰來(lái)增增強(qiáng)安全性。hmac模塊實(shí)現(xiàn)了HAMC算法,提供了相應(yīng)的函數(shù)和方法,且與hashlib提供的api基本一致。

hmac模塊使用步驟:

hmac模塊模塊的使用步驟與hashlib模塊的使用步驟基本一致,只是在第1步獲取hmac對(duì)象時(shí),只能使用hmac.new()函數(shù),因?yàn)閔mac模塊沒(méi)有提供與具體哈希算法對(duì)應(yīng)的函數(shù)來(lái)獲取hmac對(duì)象。

#!/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():
  # 創(chuàng)建key和內(nèi)容,再都進(jìn)行加密
  # hmac.new(key, msg=None, digestmod=None) // 創(chuàng)建新的hmac對(duì)象, key:鍵, msg:update(msg), digestmod:hash名稱(chēng)(同hashlib.new())(默認(rèn)md5)
  hc = hmac.new(b"key")

  # hmac對(duì)象
  hc.update(b"msg") # 字節(jié)緩沖區(qū) hc.update(a) hc.update(b) == hc.update(a+b)
  hash_bytes = hc.digest() # 字節(jié)hash
  hash_str = hc.hexdigest() # 16進(jìn)制hash字符串
  hc = hc.copy() # 拷貝hmac副本
  num = hc.digest_size # hash大小
  num = hc.block_size # hash算法內(nèi)部塊大小
  strs = hc.name # hash名稱(chēng)
  # hmac.compare_digest(a, b) // 比較兩個(gè)hash密鑰是否相同, 參數(shù)可為: 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()

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python在OpenCV里實(shí)現(xiàn)極坐標(biāo)變換功能

    Python在OpenCV里實(shí)現(xiàn)極坐標(biāo)變換功能

    這篇文章主要介紹了在OpenCV里實(shí)現(xiàn)極坐標(biāo)變換功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-09-09
  • 圖解python全局變量與局部變量相關(guān)知識(shí)

    圖解python全局變量與局部變量相關(guān)知識(shí)

    這篇文章主要介紹了圖解python全局變量與局部變量相關(guān)知識(shí),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • windows系統(tǒng)Tensorflow2.x簡(jiǎn)單安裝記錄(圖文)

    windows系統(tǒng)Tensorflow2.x簡(jiǎn)單安裝記錄(圖文)

    這篇文章主要介紹了windows系統(tǒng)Tensorflow2.x簡(jiǎn)單安裝記錄(圖文),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • python3 requests庫(kù)實(shí)現(xiàn)多圖片爬取教程

    python3 requests庫(kù)實(shí)現(xiàn)多圖片爬取教程

    今天小編就為大家分享一篇python3 requests庫(kù)實(shí)現(xiàn)多圖片爬取教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-12
  • 基于django micro搭建網(wǎng)站實(shí)現(xiàn)加水印功能

    基于django micro搭建網(wǎng)站實(shí)現(xiàn)加水印功能

    這篇文章主要介紹了基于django micro搭建網(wǎng)站實(shí)現(xiàn)加水印功能,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • 詳解Python sys.argv使用方法

    詳解Python sys.argv使用方法

    在本文中我們給大家詳細(xì)講解了關(guān)于Python sys.argv使用方法以及注意事項(xiàng),有此需要的讀者們跟著學(xué)習(xí)下。
    2019-05-05
  • pandas DataFrame 賦值的注意事項(xiàng)說(shuō)明(index)

    pandas DataFrame 賦值的注意事項(xiàng)說(shuō)明(index)

    這篇文章主要介紹了pandas DataFrame 賦值的注意事項(xiàng)說(shuō)明(index),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-04-04
  • opencv python簡(jiǎn)易文檔之圖片基本操作指南

    opencv python簡(jiǎn)易文檔之圖片基本操作指南

    OpenCv除了可以獲取圖像之外,還可以對(duì)圖像進(jìn)行一下處理操作,下面這篇文章主要給大家介紹了關(guān)于opencv python簡(jiǎn)易文檔之圖片基本操作的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • PyTorch使用自動(dòng)微分模塊的方法和理解

    PyTorch使用自動(dòng)微分模塊的方法和理解

    自動(dòng)微分模塊Autograd為張量增加了自動(dòng)求導(dǎo)功能,是神經(jīng)網(wǎng)絡(luò)訓(xùn)練不可或缺的組成部分,通過(guò)backward方法和grad屬性,實(shí)現(xiàn)梯度的計(jì)算和訪問(wèn),本小節(jié)主要講解了 PyTorch 中非常重要的自動(dòng)微分模塊的使用和理解,感興趣的朋友一起看看吧
    2024-09-09
  • Python基于歐拉角繪制一個(gè)立方體

    Python基于歐拉角繪制一個(gè)立方體

    這篇文章主要為大家詳細(xì)介紹了Python如何基于歐拉角實(shí)現(xiàn)繪制一個(gè)立方體,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-02-02

最新評(píng)論