欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python hashlib模塊用法實(shí)例分析

 更新時(shí)間:2018年06月12日 09:00:53   作者:breezey  
這篇文章主要介紹了Python hashlib模塊用法,結(jié)合實(shí)例形式分析了Python使用hash模塊進(jìn)行md5、sha1、sha224、sha256、sha512等加密運(yùn)算相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下

本文實(shí)例講述了Python hashlib模塊用法。分享給大家供大家參考,具體如下:

一、hashlib基本使用

python中的hashlib模塊用來(lái)進(jìn)行hash或者md5加密,而且這種加密是不可逆的,所以這種算法又被稱為摘要算法。其支持Openssl庫(kù)提供的所有算法,包括md5、sha1、sha224、sha256、sha512等。

常用的屬性和方法:

algorithms:列出所有加密算法('md5','sha1','sha224','sha256','sha384','sha512')
digesti_size:產(chǎn)生的散列的字節(jié)大小
md5()/sha1():創(chuàng)建一個(gè)md5或者sha1加密模式的hash對(duì)象
update(arg):用字符串參數(shù)來(lái)更新hash對(duì)象,如果同一個(gè)has對(duì)象重復(fù)調(diào)用該方法,如下:m.update(a); m.update(b),則等于m.update(a+b)
digest():返回摘要,作為二進(jìn)制數(shù)據(jù)字符串值
hexdigest():返回摘要,作為十六進(jìn)制數(shù)據(jù)字符串值
copy():復(fù)制

下面是一個(gè)簡(jiǎn)單的加密示例:

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

返回值如下:

9f97604918a2e86bfcc4aea5c35a4c8b

下面一個(gè)示例用于計(jì)算文件md5值:

#!/usr/bin/env python
#coding: utf-8
import hashlib
import sys
def 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(), filename
if __name__ == '__main__':
  main()

二、hashlib的應(yīng)用場(chǎng)景

摘要算法通常應(yīng)用于網(wǎng)站存儲(chǔ)用戶的帳號(hào)密碼相關(guān)信息。默認(rèn)情況下,我們插入到數(shù)據(jù)庫(kù)的帳號(hào)密碼都是以明文保存。這樣的話,一旦數(shù)據(jù)庫(kù)泄露,所有用戶的口令都會(huì)直接泄露,而且明文保存,網(wǎng)站管理員也可以直接查看到用戶口令,這樣及不安全。所以我們可以在獲取到用戶輸入的密碼以后,直接對(duì)其進(jìn)行加密處理。然后將加密的字符串存入數(shù)據(jù)庫(kù)。這樣當(dāng)下次用戶登錄時(shí),再對(duì)用戶輸入的密碼進(jìn)行加密處理,然后與數(shù)據(jù)庫(kù)中存儲(chǔ)的加密字串進(jìn)行比對(duì),如果匹配,則說(shuō)明密碼正確。

當(dāng)然上述方法比明文存儲(chǔ)密碼確實(shí)要安全不少。但在有些場(chǎng)景中,用戶通常會(huì)將密碼設(shè)置的尤為簡(jiǎn)單。這樣如果數(shù)據(jù)庫(kù)泄露,黑客可以通過(guò)簡(jiǎn)單的密碼嘗試來(lái)完成對(duì)加密字串的匹配。為了解決這種方法,我們通常需要對(duì)密碼做“加鹽”處理。如下:

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'部分不被泄露,就沒(méi)辦法反推用戶的簡(jiǎn)單密碼。

但是這樣仍然有個(gè)問(wèn)題,那就是多個(gè)用戶的密碼可能重復(fù),這樣,在數(shù)據(jù)庫(kù)里就會(huì)出現(xiàn)相同的加密字串。我們知道通常而言,用戶的用戶名肯定不會(huì)相同。我們?cè)偌僭O(shè)用戶的用戶名不會(huì)改變。我們可以使用用戶的用戶名來(lái)做加鹽處理,如下:

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

PS:關(guān)于加密解密感興趣的朋友還可以參考本站在線工具:

文字在線加密解密工具(包含AES、DES、RC4等):
http://tools.jb51.net/password/txt_encode

MD5在線加密工具:
http://tools.jb51.net/password/CreateMD5Password

在線散列/哈希算法加密工具:
http://tools.jb51.net/password/hash_encrypt

在線MD5/hash/SHA-1/SHA-2/SHA-256/SHA-512/SHA-3/RIPEMD-160加密工具:
http://tools.jb51.net/password/hash_md5_sha

在線sha1/sha224/sha256/sha384/sha512加密工具:
http://tools.jb51.net/password/sha_encode

更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python加密解密算法與技巧總結(jié)》、《Python編碼操作技巧總結(jié)》、《Python文件與目錄操作技巧匯總》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》及《Python入門(mén)與進(jìn)階經(jīng)典教程

希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。

相關(guān)文章

最新評(píng)論