激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - Python3 加密(hashlib和hmac)模塊的實現

Python3 加密(hashlib和hmac)模塊的實現

2020-12-20 00:30LZ_Luzhuo Python

本篇文章主要介紹了Python3 加密(hashlib / hmac)模塊的實現,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

以下代碼以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倍,這可用郵件的安全交互或其它非二進制的環境中。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#!/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()

hashmac模塊簡介:

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

hmac模塊使用步驟:

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#!/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()

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

原文鏈接:http://blog.csdn.net/rozol/article/details/72566661

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美 日韩 亚洲 中文 | 久久日本 | 精品人伦一区二区三区蜜桃网站 | 日韩精品一二三 | 蜜桃视频在线观看视频 | 欧美日韩在线播放 | 免费欧美一级视频 | 亚洲精品免费播放 | 99久久精品免费看国产四区 | 欧美一级黄色免费 | 国产成人精品午夜 | 九色 在线 | 91免费版在线 | 国产日韩欧美 | 一区二区三区欧洲 | 国产精品午夜未成人免费观看 | 午夜爽爽爽男女免费观看hd | 精品一区二区三区免费毛片 | 日本网站一区二区三区 | 亚洲成人欧美在线 | 日本娇小videos高潮 | 久久96国产精品久久秘臀 | 国产成人午夜高潮毛片 | 色妞欧美 | 二区成人 | 色猫av| 亚洲第一页综合 | zzzzzzzxxxxxx日本人| 日本中文字幕网址 | 精品一区二区三区在线观看视频 | 娇喘在线 | 国产91对白叫床清晰播放 | 国产在线欧美日韩 | 一级啪啪片| 久久久国产精品免费观看 | 高清国产免费 | 午夜网站视频 | 亚洲黑人在线观看 | 成人国产精品久久 | chinese中国真实乱对白 | 亚洲成人精品久久久 |