python hashlib模塊簡介

python hashlib模塊簡介

一刻撒、hashlib模塊里有什么

hashlib模塊提供了多種安全散列和消息摘要算法的公共接口什湘。
校驗和算法adler32或crc32則在zlib模塊中提供。[1]

在hashlib模塊中赎离,sha1()逛犹、sha224()、sha256()梁剔、sha384()虽画、sha512()和blake2b()、blake2s()方法總是存在的荣病。
md5()方法通常也是可用的码撰。如果使用了罕見的兼容美國聯(lián)邦信息處理標準(FIPS compliant)的python,則md5()可能會不能用(MD5的安全性不夠高的原因)个盆。
其它算法是否可用依賴于python所在操作系統(tǒng)的OpenSSL庫脖岛。在大多數(shù)操作系統(tǒng)中,sha3_224()砾省、sha3_256()鸡岗、sha3_384()混槐、sha3_512()和shake_128()编兄、shake_256()是可用的。
具體哪些散列算法能用声登,可以用下面的常量來查看狠鸳。

使用前先導(dǎo)入:
import hashlib

可以使用常量:
hashlib.algorithms_available 或 hashlib.algorithms_guaranteed來獲取本模塊支持的散列算法集合。

hashlib.algorithms_available

返回可用的散列函數(shù)名集合悯嗓。包含了sha384件舵,sha521,md5等32個散列函數(shù)脯厨。
注意铅祸,相同的函數(shù)可能會以不同名字(大小寫)出現(xiàn)多次。

{'RIPEMD160', 'sha224', 'sha3_224', 'SHA384', 'blake2s', 'blake2b', 
'sha3_512', 'sha1', 'DSA', 'ripemd160', 'sha3_384', 'sha3_256', 
'sha', 'shake_128', 'sha512', 'ecdsa-with-SHA1', 'shake_256', 
'SHA', 'SHA512', 'dsaEncryption', 'MD5', 'SHA256', 'DSA-SHA', 
'whirlpool', 'MD4', 'dsaWithSHA', 'SHA224', 'sha256', 'md4', 
'sha384', 'md5', 'SHA1'}

hashlib.algorithms_guaranteed

返回本模塊支持的散列函數(shù)名集合。包含了sha3_256临梗、md5等14個散列函數(shù)涡扼。此時沒有大小寫問題了。
algorithms_guaranteed返回結(jié)果是 algorithms_available返回結(jié)果的子集盟庞。

{'shake_256', 'sha224', 'sha3_224', 'blake2s', 'blake2b', 
'sha3_512', 'sha1', 'shake_128', 'sha3_384', 'sha256', 
'sha3_256', 'sha384', 'md5', 'sha512'}

二吃沪、散列算法的應(yīng)用場景

這些散列函數(shù)經(jīng)常應(yīng)用于一致性驗證、數(shù)字簽名什猖、安全訪問認證等場合票彪。[2]
比如用MD5(信息摘要算法第5版)進行文件一致性驗證。
每個文件的MD5值就像是這個文件的“數(shù)字指紋”不狮。如果任何人對文件做了任何改動降铸,其MD5值也就是對應(yīng)的“數(shù)字指紋”就會發(fā)生變化。
在軟件下載操作中摇零,通過比較前后這兩個MD5值是否相同垮耳,就能判斷下載的文件是否出錯,或者說下載的文件是否被篡改了遂黍。

某下載文件的MD5值

三终佛、使用示例

blake2b
blake2s

md5

sha1

sha224
sha256
sha384
sha512

sha3_224
sha3_256
sha3_384
sha3_512

shake_128
shake_256

這些散列算法的使用方式都是相同的,因為它們返回的都是具有相同接口的散列對象雾家。
比如使用sha256()方法創(chuàng)建SHA-256散列對象铃彰,用字節(jié)型數(shù)據(jù)當(dāng)參數(shù)調(diào)用update()方法,
用digest()或hexdigest()方法獲得相應(yīng)的摘要信息芯咧。

演示代碼如下:


#coding=utf-8

import hashlib

text = b'hello world.'
hs = hashlib.sha256()
hs.update(text)
out_text = hs.hexdigest()
print(text, '\n==> ', out_text)

# 內(nèi)容是中文時注意編碼轉(zhuǎn)換
msg = '代碼小工蟻'.encode('utf-8')
msg_hs = hashlib.sha256()
msg_hs.update(msg)
out_msg = msg_hs.hexdigest()
print(msg, '\n==> ', out_msg)
print(len(out_msg))  # 長度64位

注意:
1牙捉、update()方法的參數(shù)要是字節(jié)型,英文字符可以在字符串前加b來標識敬飒,中文等非ASCII字符要進行編碼轉(zhuǎn)換邪铲。
如:msg = '代碼小工蟻'.encode('utf-8')
msg = bytes('代碼小工蟻', encoding='utf-8')

2、對同一個hash對象進行update()操作實際上相當(dāng)于參數(shù)拼接后的update()无拗。
即hs.update(b'abc')带到,再來hs.update(b'def'),相當(dāng)于hs.update(b'abc' + b'def')英染,同hs.update(b'abcdef')

3揽惹、散列對象的hexdigest()方法返回字符型摘要信息(處理結(jié)果),digest()返回的是字節(jié)型的摘要信息四康。

百度翻譯API的代碼片斷:

    # 申請API地址:
    #       http://api.fanyi.baidu.com/api/trans/product/index
    appid = '2018***********78'
    secretKey = 'Qw6n**************fW'
    myurl = 'http://api.fanyi.baidu.com/api/trans/vip/translate'
    q = trans_text
    fromLang = 'en'
    toLang = 'zh'
    salt = random.randint(32768, 65536)
    sign = appid+q+str(salt)+secretKey
    m1 = hashlib.md5()
    m1.update(sign.encode('utf-8'))
    sign = m1.hexdigest()
    myurl = myurl+'?appid='+appid+'&q='+quote(q)+'&from='+fromLang+'&to='+toLang+'&salt='+str(salt)+'&sign='+sign

代碼說明:
百度翻譯API使用的md5()方法搪搏。
salt = random.randint(32768, 65536)
使用隨機整數(shù)“加鹽”(增加額外的信息,提高復(fù)雜度闪金,使信息摘要更有隱蔽性)

四疯溺、存在問題及發(fā)展

SHA-1存在嚴重的安全問題。2017年2月份,CWI Amsterdam和Google宣布實現(xiàn)對SHA-1碰撞攻擊囱嫩。
(總計約900萬兆次SHA1計算嗅辣。完成攻擊的首個階段需要單一CPU計算6500年。)[3]
SHA-2家族包括:SHA-256挠说、SHA-384和SHA-512以及SHA-224澡谭。
SHA-3競賽獲勝算法Keccak算法成為SHA-3,也是一個哈希家族损俭。
BLAKE2的定位是目前安全系數(shù)最高的哈希函數(shù)蛙奖。其中:
BLAKE2b是BLAKE的64位版本,它可以生成最高512位的任意長度哈希杆兵。
BLAKE2s是BLAKE的32位版本雁仲,它可以生成最高256位的任意長度哈希。
BLAKE2的速度比MD5琐脏、SHA-1要快攒砖。[4]

各種散列函數(shù)速度對比圖片來源:http://www.blake2.net/

有人說,只需要一個智能手機30秒就能破解md5日裙。[3]
我嘗試了一下吹艇,8位0-9純數(shù)字的MD5暴力破解花了約140秒。
看來程序還要優(yōu)化昂拂。

* 所有示例在WIN7 64位系統(tǒng)上執(zhí)行python3.6.1通過受神。


[1]hashlib (python 3.6)官方文檔:
https://docs.python.org/3.6/library/hashlib.html#hash-algorithms

[2]百度百科:MD5、SHA家族

[3]SHA-1被破解始末
https://mp.weixin.qq.com/s/ND9zg3YJmi13OHN28hP5QQ

[4]BLAKE2簡介
https://blog.csdn.net/u010129119/article/details/79105208

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末格侯,一起剝皮案震驚了整個濱河市鼻听,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,946評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件宵睦,死亡現(xiàn)場離奇詭異,居然都是意外死亡绑莺,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,336評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人廉嚼,你說我怎么就攤上這事玫镐〉瓜罚” “怎么了?”我有些...
    開封第一講書人閱讀 169,716評論 0 364
  • 文/不壞的土叔 我叫張陵恐似,是天一觀的道長杜跷。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么葛闷? 我笑而不...
    開封第一講書人閱讀 60,222評論 1 300
  • 正文 為了忘掉前任憋槐,我火速辦了婚禮,結(jié)果婚禮上淑趾,老公的妹妹穿的比我還像新娘阳仔。我一直安慰自己,他們只是感情好扣泊,可當(dāng)我...
    茶點故事閱讀 69,223評論 6 398
  • 文/花漫 我一把揭開白布近范。 她就那樣靜靜地躺著,像睡著了一般延蟹。 火紅的嫁衣襯著肌膚如雪评矩。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,807評論 1 314
  • 那天阱飘,我揣著相機與錄音斥杜,去河邊找鬼。 笑死沥匈,一個胖子當(dāng)著我的面吹牛蔗喂,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播高帖,決...
    沈念sama閱讀 41,235評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼弱恒,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了棋恼?” 一聲冷哼從身側(cè)響起返弹,我...
    開封第一講書人閱讀 40,189評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎爪飘,沒想到半個月后义起,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,712評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡师崎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,775評論 3 343
  • 正文 我和宋清朗相戀三年默终,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片犁罩。...
    茶點故事閱讀 40,926評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡齐蔽,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出床估,到底是詐尸還是另有隱情含滴,我是刑警寧澤,帶...
    沈念sama閱讀 36,580評論 5 351
  • 正文 年R本政府宣布丐巫,位于F島的核電站谈况,受9級特大地震影響勺美,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜碑韵,卻給世界環(huán)境...
    茶點故事閱讀 42,259評論 3 336
  • 文/蒙蒙 一赡茸、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧祝闻,春花似錦占卧、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,750評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至耸袜,卻和暖如春友多,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背堤框。 一陣腳步聲響...
    開封第一講書人閱讀 33,867評論 1 274
  • 我被黑心中介騙來泰國打工域滥, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蜈抓。 一個月前我還...
    沈念sama閱讀 49,368評論 3 379
  • 正文 我出身青樓启绰,卻偏偏與公主長得像,于是被迫代替她去往敵國和親沟使。 傳聞我的和親對象是個殘疾皇子委可,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,930評論 2 361

推薦閱讀更多精彩內(nèi)容

  • 常用模塊 認識模塊 什么是模塊 什么是模塊着倾? 常見的場景:一個模塊就是一個包含了python定義和聲明的文件,文...
    go以恒閱讀 1,965評論 0 6
  • 這篇文章主要講述在Mobile BI(移動商務(wù)智能)開發(fā)過程中燕少,在網(wǎng)絡(luò)通信卡者、數(shù)據(jù)存儲、登錄驗證這幾個方面涉及的加密...
    雨_樹閱讀 2,484評論 0 6
  • 常用模塊學(xué)習(xí) 什么是模塊? 為了維護代碼 提高代碼的可維護性; 使用模塊可以避免函數(shù)名和變量名沖突; 可重用 模塊...
    drfung閱讀 700評論 1 1
  • 2017年9月8日覺察日記+尚軍偉+9號 今天上午找領(lǐng)導(dǎo)匯報項目方案,領(lǐng)導(dǎo)聽完之后非常滿意底挫。其實說實話恒傻,連我自己都...
    浩子爸閱讀 414評論 1 6
  • 掌門_艾老師閱讀 200評論 0 0