# Python的hashlib提供了常見的摘要算法.如MD5, SHA1等.
# 摘要算法, 又稱為哈希算法, 散列算法.它通過一個函數(shù), 把任意長度的數(shù)據(jù)轉(zhuǎn)換為一個長度固定的字符串.
# 通常用16進(jìn)制的字符串來表示.
# 摘要算法主要應(yīng)用在判斷數(shù)據(jù)有沒有被篡改過.因為摘要函數(shù)是一個單向的函數(shù),計算f(data)很容易.反之非常困難.
import hashlib
md5 = hashlib.md5()
md5.update('how to user md5 in python hashlib?'.encode('utf-8'))
print(md5.hexdigest())
# 如果數(shù)據(jù)量很大, 可以很多次調(diào)用update方法.
# MD5是最常見的摘要算法, 速度很快.生成固定的128bit==> 每4bit可以表示成一個16進(jìn)制數(shù), 所以128 / 4 = 32個16進(jìn)制數(shù)
# 所以通常用一個32個字符的16進(jìn)制字符串表示.
# 通常用32個字符的16進(jìn)制字符串表示.記住其實128位!!!.
# SHA1與MD5類似, 其生成固定的160bit字節(jié).通常用一個40個字符的16進(jìn)制表示.
# 比SHA1更加安全的算法是SHA256, SHA512.不過越安全,算法越慢.而且摘要越長.
sha1 = hashlib.sha1()
sha1.update('how to use sha1 in '.encode('utf-8'))
sha1.update('python hashlib?'.encode('utf-8'))
print(sha1.hexdigest())
# 摘要算法應(yīng)用
# 摘要算法能應(yīng)用到什么地方.如允許用戶登入的網(wǎng)站
# 都會存儲用戶名和口令.方法是存到數(shù)據(jù)庫中.如果用明文保存用戶口令, 一旦數(shù)據(jù)庫泄露,就沒有安全可言
# 正確的保存口令的方式是存儲用戶口令的摘要.當(dāng)用戶登入的時候, 首先計算用戶輸入的明文口令MD5.然后
# 和數(shù)據(jù)庫中的MD5做比較.如果一致, 說明口令正確.如果不一致, 說明口令錯誤.
# 更進(jìn)一步, 通常用戶口令的MD5值是很容易被計算出來的, 所以確保存儲的用戶口令不是哪些被計算出的常用口令的MD5, 這一方法通過對原始口令
# 加一個復(fù)雜的字符串來實現(xiàn), 俗稱'加鹽'.
# def calc_md5(password):
# return get_md5(password + 'the-Salt')
#
# 只要Salt不被黑客知道, 即使用戶輸入簡單的口令, 也很難通過MD5反推出明文.
#Question: 如果兩個用戶使用了相同的簡單口令, 比如123456.在數(shù)據(jù)庫宏將存儲兩個一樣的MD5
# 有沒有辦法使用相同的口令存儲不同的MD5.
# 這是有前提的, 前提就是用戶名是唯一的, 那么我們可以通過把登入名最為哦Salt的一部分來計算MD5.
# 從而實現(xiàn)相同的口令的用戶存儲不同的MD5.
# 練習(xí): 根據(jù)用戶輸入的登入名和口令模擬用戶的注冊, 計算更加安全的MD5
db = {}
salt = 'sixleaves'
def get_md5(salted_string):
md5 = hashlib.md5()
md5.update(salted_string.encode('utf-8'))
return md5.hexdigest()
def register(username, password):
db[username] = get_md5(password + username + salt)
def login(username, password):
md5digest = get_md5(password + username + salt)
md5digest_in_db = db[username]
if md5digest == md5digest_in_db:
print('welcome my lord!')
else:
print('login failed!')
register('suweipeng', '123456')
login('suweipeng', '123456')
(內(nèi)部模塊)hashlib
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
- 文/潘曉璐 我一進(jìn)店門秽褒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人威兜,你說我怎么就攤上這事销斟。” “怎么了椒舵?”我有些...
- 文/不壞的土叔 我叫張陵蚂踊,是天一觀的道長。 經(jīng)常有香客問我笔宿,道長犁钟,這世上最難降的妖魔是什么? 我笑而不...
- 正文 為了忘掉前任泼橘,我火速辦了婚禮涝动,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘炬灭。我一直安慰自己醋粟,他們只是感情好,可當(dāng)我...
- 文/花漫 我一把揭開白布重归。 她就那樣靜靜地躺著米愿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪鼻吮。 梳的紋絲不亂的頭發(fā)上育苟,一...
- 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼闲孤!你這毒婦竟也來了谆级?” 一聲冷哼從身側(cè)響起烤礁,我...
- 正文 年R本政府宣布,位于F島的核電站沦疾,受9級特大地震影響称近,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜哮塞,卻給世界環(huán)境...
- 文/蒙蒙 一刨秆、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧忆畅,春花似錦衡未、人聲如沸。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至肆饶,卻和暖如春改衩,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背驯镊。 一陣腳步聲響...
推薦閱讀更多精彩內(nèi)容
- MYSQL: 首次安裝后:1晒夹、初始化mysqlmy.cnf文件包含數(shù)據(jù)存放目錄和臨時目錄:datadir =...
- 特點: (1)前后端都用js編寫容易實現(xiàn)全棧 (2)非阻塞 i/o (最重要) (3)完善的生態(tài) (4)使用v8引...