(內(nèi)部模塊)hashlib

# 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')


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市瘫析,隨后出現(xiàn)的幾起案子剔应,更是在濱河造成了極大的恐慌,老刑警劉巖口芍,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件黔酥,死亡現(xiàn)場離奇詭異聋呢,居然都是意外死亡,警方通過查閱死者的電腦和手機触机,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進(jìn)店門秽褒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人威兜,你說我怎么就攤上這事销斟。” “怎么了椒舵?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵蚂踊,是天一觀的道長。 經(jīng)常有香客問我笔宿,道長犁钟,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任泼橘,我火速辦了婚禮涝动,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘炬灭。我一直安慰自己醋粟,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布重归。 她就那樣靜靜地躺著米愿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪鼻吮。 梳的紋絲不亂的頭發(fā)上育苟,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天,我揣著相機與錄音椎木,去河邊找鬼违柏。 笑死博烂,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的漱竖。 我是一名探鬼主播禽篱,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼闲孤!你這毒婦竟也來了谆级?” 一聲冷哼從身側(cè)響起烤礁,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤讼积,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后脚仔,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體勤众,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年鲤脏,在試婚紗的時候發(fā)現(xiàn)自己被綠了们颜。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡猎醇,死狀恐怖窥突,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情硫嘶,我是刑警寧澤阻问,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站沦疾,受9級特大地震影響称近,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜哮塞,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一刨秆、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧忆畅,春花似錦衡未、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至肆饶,卻和暖如春改衩,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背驯镊。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工葫督, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留竭鞍,地道東北人。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓橄镜,卻偏偏與公主長得像偎快,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子洽胶,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,033評論 2 355

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