国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

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

2020-02-16 10:50:23
字體:
供稿:網(wǎng)友

以下代碼以Python3.6.1為例

    hashlib : 不可逆加密 hmac : 不可逆鍵值對方式加密

hashlib模塊簡介:

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

hashlib模塊使用步驟:

1)獲取一個哈希算法對應的哈希對象(比如名稱為hash): 可以通過 hashlib.new(哈希算法名稱, 初始出入信息)函數(shù),來獲取這個哈希對象,如hashlib.new('MD5', 'Hello'),hashlib.new('SHA1', 'Hello')等;也可以通過hashlib.哈希算法名稱()來獲取這個哈希對象,如hashlib.md5(), hashlib.sha1()等。

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

3)獲取輸入信息對應的摘要: 調(diào)用已得到的哈希對象的digest()方法或hexdigest()方法即可得到傳遞給update()方法的字符串參數(shù)的摘要信息。digest()方法返回的摘要信息是一個二進制格式的字符串,其中可能包含非ASCII字符,包括NUL字節(jié),該字符串長度可以通過哈希對象的digest_size屬性獲?。欢鴋exdigest()方法返回的摘要信息是一個16進制格式的字符串,該字符串中只包含16進制的數(shù)字,且長度是digest()返回結(jié)果長度的2倍,這可用郵件的安全交互或其它非二進制的環(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 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]) // 創(chuàng)建hashlib(非首選), name=算法名, data:數(shù)據(jù)  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:數(shù)據(jù), salt:鹽, iterations:循環(huán)次數(shù), dklen:密鑰長度  hash_bytes = hashlib.pbkdf2_hmac('sha256', b'luzhuo.me', b'80', 100000)  # hash對象  num = hash.digest_size # hash結(jié)果的大小  num = hash.block_size # hash算法的內(nèi)部塊的大小  strs = hash.name # hash名稱, 可傳給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進制字符串hash  hash = hash.copy() # 拷貝hash對象副本 if __name__ == "__main__":  hash_demo()  # hash_func()            
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 四会市| 全州县| 喀什市| 夏河县| 石林| 巩义市| 阳高县| 东源县| 高邑县| 泾源县| 二手房| 大化| 沙河市| 宝清县| 宝山区| 唐河县| 裕民县| 蕉岭县| 中超| 青川县| 司法| 长丰县| 永平县| 高阳县| 临江市| 淅川县| 河南省| 崇州市| 宣汉县| 贵南县| 连州市| 乌拉特后旗| 隆回县| 宜昌市| 兰西县| 红原县| 天气| 万源市| 安福县| 韶山市| 绥阳县|