1. 程式人生 > >hashlib 模組用來進行hash

hashlib 模組用來進行hash

hashlib的基本概述:

  python中的 hashlib 模組用來進行hash 或者md5加密,而且這種加密是不可逆的,所以這種演算法又被稱為摘要演算法,

其支援Opennssl庫提供的所有演算法,包括 md5、sha1、sha224、sha256、sha512 等。

 

 

hash是一種演算法 是將一個任意長的資料 根據計算 得到一個固定長度特徵嗎

 特徵:1、不同輸入   可能會有相同的結果 機率特別小

    2、相同的輸入 必然得到相同結果

    3、由於雜湊(特徵)的性質 從原理來看是不可能 反解

    4、用來 驗證   兩個輸入的資料是否一致

 使用場景:

   1、密碼驗證

   2、驗證資料是否被篡改  比如遊戲安裝包    有沒有被改過

 為了防止別人撞庫成功  可用提升密碼的複雜度   其次可以為密碼加鹽(加點內容進去)

ps:撞庫破解的原理  把常見的 明文和密文的對應關係 存到了資料庫中  運氣好就能查詢到

 

常用的屬性和方法

  algorithms : 列出所有加密演算法

  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  hashlib
m = hashlib.md5("aaa".encode("utf-8"))
print(m.hexdigest())

結果如下:

47bce5c74f589f4867dbd57e9ca9f808

 

下面是一個簡單的加鹽例項:

import  hashlib

m = hashlib.md5("321".encode("utf-8"))
#
m.update("abcdefplkjoujhh".encode("utf-8"))

print(m.hexdigest())

結果如下:

7da0befdd8fd811dd0716941c38c0111

 

關於hmac 的例項:

import hmac
# 沒啥區別 只是在建立的時候必須加鹽
h = hmac.new("abcdefjjjj".encode("utf-8"))

h.update("123".encode("utf-8"))

print(h.hexdigest())

結果如下:

944b3523fac69f32f6d399a11707da8b