溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Python的hashlib模塊

發(fā)布時(shí)間:2020-09-21 09:44:55 來(lái)源:億速云 閱讀:174 作者:Leah 欄目:編程語(yǔ)言

這篇文章將為大家詳細(xì)講解有關(guān)Python的hashlib模塊,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。

常用模塊 - hashlib模塊

一、簡(jiǎn)介

Python的hashlib提供了常見的摘要算法,如MD5、SHA1、SHA224、SHA256、SHA384、SHA512等算法。

什么是摘要算法呢?摘要算法又稱哈希算法、散列算法。它通過(guò)一個(gè)函數(shù),把任意長(zhǎng)度的數(shù)據(jù)轉(zhuǎn)換為一個(gè)長(zhǎng)度固定的數(shù)據(jù)串(通常用16進(jìn)制的字符串表示)。

舉個(gè)例子,你寫了一篇文章,內(nèi)容是一個(gè)字符串“how to use python hashlib – by mayi”,并附上這篇文章的摘要是“75b850b26f4e75b1ad3db76a255065f2”。如果有人篡改了你的文章,并發(fā)表為“how to use python hashlib – by bob”,你可以一下子指定bob篡改了你的文章,因?yàn)楦鶕?jù)“how to use python hashlib – by bob”計(jì)算出的摘要不同于原始文章的摘要。

二、md5加密

import hashlib
hash = hashlib.md5()
hash.update("mayi".encode("utf-8"))
# 7d1080e20427559fcc0a647826741f66
print(hash.hexdigest())

三、sha1加密

import hashlib
hash = hashlib.sha1()
hash.update("mayi".encode("utf-8"))
# c159ce3114fb4553683cf96d91db6d51080c02e8
print(hash.hexdigest())

四、sha256加密

import hashlib
hash = hashlib.sha256()
hash.update("mayi".encode("utf-8"))
# 5dfae51e782cce2f213ef6bc89f75c9ab6c3bd8a5d1299a73191677cd5aa1f93
print(hash.hexdigest())

五、sha384加密

import hashlib
hash = hashlib.sha384()
hash.update("mayi".encode("utf-8"))
# a1eb5c52e830d5ea4fdb0a3dc2241374f56426aebacd8890a69c7db57724788ec5047a005ecff4a23310b7f87035926f
print(hash.hexdigest())

六、sha512加密

import hashlib
hash = hashlib.sha512()
hash.update("mayi".encode("utf-8"))
# 93102ec5658f739c060e3d82096e538ec116d0c9d6925119b465f0823be99697056518465cc6fe75265deb26632c8ce62b3d63a8782c492
daac2b9c03a89defe
print(hash.hexdigest())

七、“加鹽”加密

以上的加密算法雖然很厲害,但仍然存在缺陷,通過(guò)撞庫(kù)可以反解。所以必要對(duì)加密算法中添加自定義key再來(lái)做加密。

import hashlib
hash = hashlib.md5('python'.encode('utf-8'))
hash.update("mayi".encode("utf-8"))
# b0758ad1aad20530044668775f389922
print(hash.hexdigest())

八、摘要算法應(yīng)用

摘要算法能應(yīng)用到什么地方?舉個(gè)常用的例子:

任何允許用戶登錄的網(wǎng)站都會(huì)存儲(chǔ)用戶登錄的用戶名和密碼。如何存儲(chǔ)用戶名和密碼呢?方法是存到數(shù)據(jù)庫(kù)表中:

Python的hashlib模塊

如果以明文保存用戶密碼,如果數(shù)據(jù)庫(kù)泄露,所有用戶的密碼就落入到黑客的手里。此外,網(wǎng)站運(yùn)維人員是可以訪問(wèn)數(shù)據(jù)庫(kù)的,也就是能獲取到所有用戶的密碼。

正確的保存密碼的方式是不存儲(chǔ)用戶的明文密碼,而是存儲(chǔ)用戶密碼的摘要,比如MD5:

Python的hashlib模塊

當(dāng)用戶登錄時(shí),首先計(jì)算用戶輸入的明文密碼的MD5,然后和數(shù)據(jù)庫(kù)存儲(chǔ)的MD5比較,如果一致,說(shuō)明密碼輸入正確,否則,密碼輸入錯(cuò)誤。

存儲(chǔ)MD5的好處是即使運(yùn)維人員能訪問(wèn)數(shù)據(jù)庫(kù),也無(wú)法獲知用戶的明文密碼。

采用MD5存儲(chǔ)密碼是否就一定安全呢?也不一定。假設(shè)你是一個(gè)黑客,已經(jīng)拿到存儲(chǔ)MD5密碼的數(shù)據(jù)庫(kù),如何通過(guò)MD5反推用戶的明文密碼呢?暴力破解費(fèi)時(shí)費(fèi)力,真正的黑客是不會(huì)這么干的。

考慮這么個(gè)情況,很多用戶喜歡用“123456”、“888888”、“password”等這些簡(jiǎn)單的密碼,于是,黑客可以事先計(jì)算出這些常用的密碼的MD5值,得到一個(gè)反推表。這樣,無(wú)需破解,只需要對(duì)比數(shù)據(jù)庫(kù)的MD5,黑客就獲得了使用常用密碼的用戶賬號(hào)信息。

對(duì)于用戶來(lái)講,當(dāng)然不要使用過(guò)于簡(jiǎn)單的密碼。但是,我們能否在程序設(shè)計(jì)上對(duì)簡(jiǎn)單的密碼加強(qiáng)保護(hù)呢?

由于常用密碼的MD5值很容易被反推出來(lái),所以,要確保存儲(chǔ)的用戶密碼不是那些已經(jīng)被計(jì)算出來(lái)的常用密碼的MD5就好了,這一方法通過(guò)對(duì)原始密碼加一個(gè)復(fù)雜字符串來(lái)實(shí)現(xiàn),俗稱“加鹽”。

關(guān)于Python的hashlib模塊就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI