Python3 加密(hashlib和hmac)模組的實現,python3hashlib

來源:互聯網
上載者:User

Python3 加密(hashlib和hmac)模組的實現,python3hashlib

以下代碼以Python3.6.1為例

  1. hashlib : 無法復原加密
  2. hmac : 無法復原索引值對方式加密

hashlib模組簡介:

hashlib模組為不同的安全雜湊/安全散列(Secure Hash Algorithm)和 資訊摘要演算法(Message Digest Algorithm)實現了一個公用的、通用的介面,也可以說是一個統一的入口。因為hashlib模組不僅僅是整合了md5和sha模組的功能,還提供了對更多中演算法的函數實現,如:MD5,SHA1,SHA224,SHA256,SHA384和SHA512。

hashlib模組使用步驟:

1)擷取一個雜湊演算法對應的雜湊對象(比如名稱為hash): 可以通過 hashlib.new(雜湊演算法名稱, 初始出入資訊)函數,來擷取這個雜湊對象,如hashlib.new('MD5', 'Hello'),hashlib.new('SHA1', 'Hello')等;也可以通過hashlib.雜湊演算法名稱()來擷取這個雜湊對象,如hashlib.md5(), hashlib.sha1()等。

2)設定/追加輸入資訊: 調用已得到雜湊對象的update(輸入資訊)方法可以設定或追加輸入資訊,多次調用該方法,等價於把每次傳遞的參數憑藉後進行作為一個參數墊底給update()方法。也就是說,多次調用是累加,而不是覆蓋。

3)擷取輸入資訊對應的摘要: 調用已得到的雜湊對象的digest()方法或hexdigest()方法即可得到傳遞給update()方法的字串參數的摘要資訊。digest()方法返回的摘要資訊是一個二進位格式的字串,其中可能包含非ASCII字元,包括NUL位元組,該字串長度可以通過雜湊對象的digest_size屬性擷取;而hexdigest()方法返回的摘要資訊是一個16進位格式的字串,該字串中只包含16進位的數字,且長度是digest()返回結果長度的2倍,這可用郵件的安全互動或其它非二進位的環境中。

#!/usr/bin/env python# coding=utf-8__author__ = 'Luzhuo'__date__ = '2017/5/19'# hash_demo.py Hash加密相關(安全雜湊)# 支援: MD5, SHA1 SHA224 SHA256 SHA384 SHA512import hashlibdef 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()

hashmac模組簡介:

前面說過,HMAC演算法也是一種一種單項密碼編譯演算法,並且它是基於上面各種雜湊演算法/散列演算法的,只是它可以在運算過程中使用一個密鑰來增增強安全性。hmac模組實現了HAMC演算法,提供了相應的函數和方法,且與hashlib提供的api基本一致。

hmac模組使用步驟:

hmac模組模組的使用步驟與hashlib模組的使用步驟基本一致,只是在第1步擷取hmac對象時,只能使用hmac.new()函數,因為hmac模組沒有提供與具體雜湊演算法對應的函數來擷取hmac對象。

#!/usr/bin/env python# coding=utf-8__author__ = 'Luzhuo'__date__ = '2017/5/19'# hmac_demo.py HMAC演算法# 與hashlib不同之處在於多了keyimport hmacdef 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()

以上就是本文的全部內容,希望對大家的學習有所協助,也希望大家多多支援幫客之家。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.