python的hashlib模組

來源:互聯網
上載者:User

標籤:gis   技術   lib   a+b   password   hash   algo   main   等於   

一、hashlib基本使用

  python中的hashlib模組用來進行hash或者md5加密,而且這種加密是無法復原的,所以這種演算法又被稱為摘要演算法。其支援Openssl庫提供的所有演算法,包括md5、sha1、sha224、sha256、sha512等。

常用的屬性和方法:

algorithms:列出所有密碼編譯演算法(‘md5‘,‘sha1‘,‘sha224‘,‘sha256‘,‘sha384‘,‘sha512‘)

digesti_size:產生的散列的位元組大小

md5()/sha1():建立一個md5或者sha1加密模式的hash對象

update(arg):用字串參數來更新hash對象,如果同一個has對象重複調用該方法,如下:m.update(a); m.update(b),則等於m.update(a+b)

digest():返回摘要,作為位元據字串值

hexdigest():返回摘要,作為十六進位資料字串值

copy():複製

 

下面是一個簡單的加密樣本:

import hashlibm = hashlib.md5()m.update(‘how to use md5‘.encode(‘utf-8‘))m.update(‘in python hashlib‘.encode(‘utf-8‘))print m.hexdigest()

傳回值如下:

9f97604918a2e86bfcc4aea5c35a4c8b

 

下面一個樣本用於計算檔案md5值:

#!/usr/bin/env python#coding: utf-8import hashlibimport sysdef main():    if len(sys.argv) != 2:        sys.exit(‘Usage: %s file‘ % sys.argv[0])    filename = sys.argv[1]    m = hashlib.md5()    with open(filename, ‘rb‘) as fp:        while True:            blk = fp.read(4096) # 每次讀取4kb            if not blk: break            m.update(blk)    print m.hexdigest(), filenameif __name__ == ‘__main__‘:    main()

 

二、hashlib的應用情境

  摘要演算法通常應用於網站儲存使用者的帳號密碼相關資訊。預設情況下,我們插入到資料庫的帳號密碼都是以明文儲存。這樣的話,一旦資料庫泄露,所有使用者的口令都會直接泄露,而且明文儲存,網站管理員也可以直接查看到使用者口令,這樣及不安全。所以我們可以在擷取到使用者輸入的密碼以後,直接對其進行加密處理。然後將加密的字串存入資料庫。這樣當下次使用者登入時,再對使用者輸入的密碼進行加密處理,然後與資料庫中儲存的加密字串進行比對,如果匹配,則說明密碼正確。

  當然上述方法比明文儲存密碼確實要安全不少。但在有些情境中,使用者通常會將密碼設定的尤為簡單。這樣如果資料庫泄露,駭客可以通過簡單的密碼嘗試來完成對加密字串的匹配。為瞭解決這種方法,我們通常需要對密碼做“加鹽”處理。如下:

def get_md5(password):      m = hashlib.md5()    m.update(password)    return m.hexdigest()def calc_md5(password):    return get_md5(password + ‘the-Salt‘)db = {}def register(username,password):    db[username] = username    db[password] = calc_md5(password)

 

這樣,只要‘the-Salt‘部分不被泄露,就沒辦法反推使用者的簡單密碼。

但是這樣仍然有個問題,那就是多個使用者的密碼可能重複,這樣,在資料庫裡就會出現相同的加密字串。我們知道通常而言,使用者的使用者名稱肯定不會相同。我們再假設使用者的使用者名稱不會改變。我們可以使用使用者的使用者名稱來做加鹽處理,如下:

def clc_md5(username,password):    return get_md5(passwd + username + ‘the-Salt‘)

python的hashlib模組

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.