這篇文章給大家介紹如何在Python中使用hashlib和hmac加密模塊,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
我們提供的服務(wù)有:成都網(wǎng)站制作、網(wǎng)站建設(shè)、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、路南ssl等。為上千家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的路南網(wǎng)站制作公司import hashlib import time m = hashlib.md5() api_key = '' api_secret = '' params = {'api_key':api_key, 'time':int(time.time()), 'symbol':'btclcny'} def sign( data , secret ): signStr = "" keys = data.keys() keys = sorted(keys) for key in keys: signStr = signStr + key signStr = signStr + bytes(data[key]) pass signStr += secret m.update(signStr) return m.hexdigest() print sign( params , api_secret )
實(shí)在搞不懂寫的人的意思,里面有字符串與字節(jié)碼的相加?反正就是跑不起來,隨便我這個(gè)加密模塊也用的少,這次就給自己記錄學(xué)習(xí)的機(jī)會來了。
媽的,這個(gè)平臺太垃圾了,接口有問題的,浪費(fèi)我好長時(shí)間,后面還去看了它的PHP代碼,看的腦子發(fā)麻,后來仔細(xì)研究了傳入 params,里面的接口文檔寫的亂七八糟,浪費(fèi)時(shí)間。一萬頭草泥馬飛過。
切入主題,先講hashlib,后面介紹hmac,有時(shí)間下一個(gè)章節(jié),把base64還有io,以及pickle,json,shelve,fileinput.
概念:
Python的hashlib提供了常見的摘要算法,如MD5,SHA1等等。
什么是摘要算法呢?摘要算法又稱哈希算法、散列算法。它通過一個(gè)函數(shù),把任意長度的數(shù)據(jù)轉(zhuǎn)換為一個(gè)長度固定的數(shù)據(jù)串(通常用16進(jìn)制的字符串表示)。所以看來的hash加密值沒有超過字母f的
后面可以測試每種加密手法的輸出字段長度,也可以知道具體輸出的Byte字節(jié)數(shù)(一個(gè)16進(jìn)制的數(shù)對應(yīng)4位)。
'''初始化對象''' h2 = hashlib.md5() h3 = hashlib.new('md5') h4 = hashlib.md5() h2.update(b'123') # 進(jìn)行摘要 h3.update('123'.encode()) h4.update(b'1') h4.update(b'23') print(h2.hexdigest()) # 取值 print(h3.hexdigest()) print(h4.hexdigest())
202cb962ac59075b964b07152d234b70<br data-filtered="filtered">202cb962ac59075b964b07152d234b70<br data-filtered="filtered">202cb962ac59075b964b07152d234b70
一共有兩種實(shí)例化的方法,一般介紹都是第一種。記住,進(jìn)行進(jìn)行md5摘要時(shí),對象一定是二進(jìn)制數(shù)據(jù)。
update其實(shí)可以分開用,只要里面的數(shù)據(jù)沒有變,分開用書上介紹對大文件操作會更加快。
由于這樣直接加密,沒有添加輔助字符,假如是用戶的密碼設(shè)置的很簡單,很容易通過加密后的數(shù)據(jù)也能反向分析出密碼,所以要添加一些干擾詞匯。
hmac也是干擾加密的另外一種相對看過去比較高級的寫法。
add_word = b'haha' # 把這個(gè)當(dāng)做加密鹽, hh2 = hashlib.md5() hh2.update(add_word + b'jiujiu') print(hh2.hexdigest()) hh3 = hashlib.md5() hh3.update( b'jiujiu' + add_word) print(hh3.hexdigest()) m = hmac.new(add_word) # 這個(gè)跟hashlib的寫法有點(diǎn)類似,默認(rèn)是md5加密 m.update(b'jiujiu') print(m.hexdigest()) h_md5 = hmac.new(add_word, b'jiujiu').hexdigest() # 這是另外一種方式,直接加密后取值。 h_sha1 = hmac.new(add_word, b'jiujiu', 'sha1').hexdigest() h_sha224 = hmac.new(add_word, b'jiujiu', 'sha224').hexdigest() h_sha256 = hmac.new(add_word, b'jiujiu', 'sha256').hexdigest() h_sha512 = hmac.new(add_word, b'jiujiu', 'sha512').hexdigest() print(h_md5, len(h_md5), sep='======>num') print(h_sha1, len(h_sha1), sep='======>num') # 通過輸出可以看出,md5輸出32個(gè)16進(jìn)制數(shù)字,一共128位 print(h_sha224, len(h_sha224), sep='======>num') # sha1輸出40個(gè)數(shù)字,所以為160位,剩下的sha后面的數(shù)字就代表輸出幾位。 print(h_sha256, len(h_sha256), sep='======>num') print(h_sha512, len(h_sha512), sep='======>num')
3e289c523f955430bce2e47a14d4934b eb01e09a1fe2bfd95d8f31c8ae544faf ef84bc9ee2bf91d1789227d82193d7a9 ef84bc9ee2bf91d1789227d82193d7a9======>num32 fbd95ddafdac6352cdf3d9d4e8c6d2421c80e56c======>num40 60d1896d00e73bc67469a58b39ded91c60c162eda0f44306f7d08d58======>num56 b36f8977bba6265612bc338b89c698d17cff7ccfb81b7d7a434f0ad889995e26======>num64 043f51bd410f9d328ca0ab0913ddfde9c2519f639c74447a1516811b8920b125aa6f4d3977c83e038e82c39103ac2a3bbdd5235c9c95fc030a267cdf0d578696======>num128
從整個(gè)代碼的操作來看還是比較簡單,至少比我想象的簡單,加密的邏輯我也不懂,我也知道密碼學(xué)很高級,就我這小學(xué)三年級的數(shù)學(xué)有空再看吧。
hmac只不過是一種機(jī)器加密的手段,但我試過了,無論我把這個(gè)加密鹽放加密字節(jié)碼的前面或者后面,跟hmac出來的效果不一樣,看來它有自己的拼接加密算法。
至于sha1,sha256,sha512就比較容易記住了,md5是32個(gè)16進(jìn)制數(shù)輸出,所以包含bit是128位,sha1是是輸出40個(gè)16進(jìn)制數(shù),所以是160個(gè)bit,剩下的比較好理解,后面的數(shù)字代表了幾個(gè)bit位。
關(guān)于如何在Python中使用hashlib和hmac加密模塊就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。
本文標(biāo)題:如何在Python中使用hashlib和hmac加密模塊-創(chuàng)新互聯(lián)
標(biāo)題來源:http://jinyejixie.com/article44/disphe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供自適應(yīng)網(wǎng)站、品牌網(wǎng)站設(shè)計(jì)、營銷型網(wǎng)站建設(shè)、網(wǎng)站排名、網(wǎng)站維護(hù)、App設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容