Python內(nèi)置模塊hashlib、hmac與uuid用法分析
本文實(shí)例講述了Python內(nèi)置模塊hashlib、hmac與uuid用法。分享給大家供大家參考,具體如下:
一、hashlib
md5和sha算法通過消息摘要算法生成定長(zhǎng)的消息摘要,消息摘要算法是不可逆的。但同一段消息通過摘要算法后得到的值是一樣的,可一通過比對(duì)消息摘要驗(yàn)證數(shù)據(jù)的完整性。
sha算法比MD5算法安全,但所需的時(shí)間也稍長(zhǎng)。
1、原始消息摘要
import hashlib # ######## md5 ######## hash = hashlib.md5() hash.update('admin') print hash.hexdigest() #21232f297a57a5a743894a0e4a801fc3 # ######## sha1 ######## hash = hashlib.sha1() hash.update('admin') print hash.hexdigest(),len(hash.hexdigest()) # d033e22ae348aeb5660fc2140aec35850c4da997 40 # ######## sha256 ######## hash = hashlib.sha256() hash.update('admin') print hash.hexdigest(),len(hash.hexdigest()) # 8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918 64 # ######## sha384 ######## hash = hashlib.sha384() hash.update('admin') print hash.hexdigest(),len(hash.hexdigest()) # 9ca694a90285c034432c9550421b7b9dbd5c0f4b6673f05f6dbce58052ba20e4248041956ee8c9a2ec9f10290cdc0782 96 # ######## sha512 ######## hash = hashlib.sha512() hash.update('admin') print hash.hexdigest(),len(hash.hexdigest()) # c7ad44cbad762a5da0a452f9e854fdc1e0e7a52a38015f23f3eab1d80b931dd472634dfac71cd34ebc35d16ab7fb8a90c81f975113d6c7538dc69dd8de9077ec 128
2、加鹽(salt)后摘要
由于同一個(gè)消息通過摘要算法得到的摘要是相同的,因此可以通過撞庫(kù)的方式得到原始消息值。解決方式是,添加一個(gè)salt拼接原始消息后再進(jìn)行計(jì)算。
import hashlib # ######## md5 ######## hash = hashlib.md5('898oaFs09f') hash.update('admin') print hash.hexdigest() #以上等價(jià)與 hash = hashlib.md5() hash.update('898oaFs09fadmin') print hash.hexdigest()
二、HMAC
HAMC它內(nèi)部對(duì)我們創(chuàng)建 key 和 內(nèi)容 再進(jìn)行處理然后再加密,相當(dāng)安全。一般用于挑戰(zhàn)應(yīng)答。
import hashlib import hmac h = hmac.new('keysstring') h.update('hello') print h.hexdigest(),len(h.hexdigest()) # 2ca7ac50a9bca542e58e0baad15f8383 32
三、UUID
UUID是128位的全局唯一標(biāo)識(shí)符,通常由32字節(jié)的字符串表示。它可以保證時(shí)間和空間的唯一性,python中稱為UUID,其他語(yǔ)言中可能稱為GUID。
它通過MAC地址、時(shí)間戳、命名空間、隨機(jī)數(shù)、偽隨機(jī)數(shù)來(lái)保證生成ID的唯一性。
UUID主要有五個(gè)算法,也就是五種方法來(lái)實(shí)現(xiàn):
1、uuid1()——基于時(shí)間戳。由MAC地址、當(dāng)前時(shí)間戳、隨機(jī)數(shù)生成??梢员WC全球范圍內(nèi)的唯一性,但MAC的使用同時(shí)帶來(lái)安全性問題,局域網(wǎng)中可以使用IP來(lái)代替MAC。
2、uuid2()——基于分布式計(jì)算。環(huán)境DCE(Python中沒有這個(gè)函數(shù))算法與uuid1相同,不同的是把時(shí)間戳的前4位置換為POSIX的UID。實(shí)際中很少用到該方法。
3、uuid3()——基于名字的MD5散列值。通過計(jì)算名字和命名空間的MD5散列值得到,保證了同一命名空間中不同名字的唯一性,和不同命名空間的唯一性,但同一命名空間的同一名字生成相同的uuid。
4、uuid4()——基于隨機(jī)數(shù)。由偽隨機(jī)數(shù)得到,有一定的重復(fù)概率,該概率可以計(jì)算出來(lái)。
5、uuid5()——基于名字的SHA-1散列值。算法與uuid3相同,不同的是使用 SHA-1算法。
python中沒有實(shí)現(xiàn)uuid2算法。
import uuid print uuid.uuid1() print uuid.uuid3(uuid.NAMESPACE_DNS, 'testme') print uuid.uuid4() print uuid.uuid5(uuid.NAMESPACE_DNS, 'testme') # 1a52b39e-a197-11e6-b5c6-8056f2d4c814 # 7a67f5d4-50fd-36f7-bbeb-1c739ab40b8c # 0c0cc4f0-6ad0-40d3-a796-119dcfaddf60 # dac48d1f-a443-578c-8754-856842a2f98d
PS:關(guān)于加密解密感興趣的朋友還可以參考本站在線工具:
文字在線加密解密工具(包含AES、DES、RC4等):
http://tools.jb51.net/password/txt_encode
MD5在線加密工具:
http://tools.jb51.net/password/CreateMD5Password
在線散列/哈希算法加密工具:
http://tools.jb51.net/password/hash_encrypt
在線MD5/hash/SHA-1/SHA-2/SHA-256/SHA-512/SHA-3/RIPEMD-160加密工具:
http://tools.jb51.net/password/hash_md5_sha
在線sha1/sha224/sha256/sha384/sha512加密工具:
http://tools.jb51.net/password/sha_encode
更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python加密解密算法與技巧總結(jié)》、《Python編碼操作技巧總結(jié)》、《Python文件與目錄操作技巧匯總》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》及《Python入門與進(jìn)階經(jīng)典教程》
希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。
相關(guān)文章
Python?jieba分詞添加自定義詞和去除不需要長(zhǎng)尾詞的操作方法
這篇文章主要介紹了Python?jieba分詞如何添加自定義詞和去除不需要長(zhǎng)尾詞,主要介紹jieba的基礎(chǔ)用法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-03-03Python?clip與range函數(shù)保姆級(jí)使用教程
本文主要和大家介紹了詳解Python中clip與range函數(shù)的用法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參,希望能幫助到大家2022-06-06python 實(shí)現(xiàn)全球IP歸屬地查詢工具
這篇文章主要介紹了python 實(shí)現(xiàn)全球IP歸屬地查詢工具的示例代碼,幫助大家更好的理解和使用python,感興趣的朋友可以了解下2020-12-12python實(shí)現(xiàn)將文件名批量命名為四位數(shù)or五位數(shù)
這篇文章主要介紹了python實(shí)現(xiàn)將文件名批量命名為四位數(shù)or五位數(shù)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08python自定義函數(shù)中的return和print使用及說明
這篇文章主要介紹了python自定義函數(shù)中的return和print使用及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-01-01詳解Python在使用JSON時(shí)需要注意的編碼問題
這篇文章主要介紹了詳解Python在使用JSON時(shí)需要注意的編碼問題,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12跨平臺(tái)python異步回調(diào)機(jī)制實(shí)現(xiàn)和使用方法
這篇文章主要介紹了python異步回調(diào)機(jī)制的實(shí)現(xiàn)方法,提供了使用方法代碼2013-11-11