1. 程式人生 > >Python模組——hashlib

Python模組——hashlib

簡介

hashlib模組是用於對字串進行加密,其可以把任意長度的資料轉換為一個長度固定的資料串,且這種加密是不可逆的,故這種加密方式的安全性都很高。hash本質是一個函式,該模組提供了許多不同的加密演算法,可檢視其屬性algorithms_guaranteed來獲取,包括md5, sha1, sha224, sha256, sha384, sha512,使用非常簡單、方便。該模組由python自帶,故不需要自己安裝。其中md5演算法多用於對密碼的加密,而sha1加密後的長度比md5更長,故安全性更高,但相應的運算速度就會變慢.

常用方法

  • 資料加密:有兩種方式,推薦使用第二種,因為這種加密演算法直接hashlib點出來即可。
import hashlib

password = '18779385769wl'.encode()
result1 = hashlib.new('md5',password)
result2  = hashlib.md5(password)
print(result1)
print(result2)
<md5 HASH object @ 0xb71a6598>
<md5 HASH object @ 0xb71a6700>

可以看出,列印結果並不能得到加密後的資料,只是給出了其記憶體地址而已,hashlib給了專門的方法來獲取加密的資料。在加密前給的密碼我們記得要先編碼為utf8.

  • 獲取加密後的資料:有兩種方式,第一種以二進位制形式返回,第二種以十六進位制返回。
import hashlib

password = '18779385769wl'.encode()
result1 = hashlib.md5(password)
print (result1.digest())
print(type(result1.digest()))
print (result1.hexdigest())
print(type(result1.hexdigest()))
b'\xc6\x9bA\x05\xdaf%$\xf7\xe7\xd9\x1b\x13\xba\xf1\xad'
<class 'bytes'>
c69b4105da662524f7e7d91b13baf1ad
<class 'str'>

這裡要講一個知識點就是加鹽salt,它的目的是加大加密的安全性,給一些簡易的密碼提高被破解的難度,其原理就是再原先密碼的基礎上再加上一串字元,如下程式碼所示:

import hashlib
salt = 'qweasd'.encode()
password = '18779385769wl'.encode()+salt
result  = hashlib.md5(password)
print(result.digest())
print(result.hexdigest())
b',\xd9\xc1WE\x02(\xa927\xc1\xe3g\xc0\xfa&'
2cd9c157450228a93237c1e367c0fa26
  • 標準給密碼加密:該模組給了一個比較全面的方法來給密碼加密。
salt = 'qweasd'.encode()
password = '18779315769wl'.encode()
res = hashlib.pbkdf2_hmac('md5',password,salt,100)#100是迭代次數,更加大了安全性
print(res)
print(type(res))
b'\x87\xe9\x92\xb2\x10l\x89OG\xc2~\xfe#N~\xf0'
<class 'bytes'>

該函式的返回結果就是加密後的資料,故可直接打印出來,這裡不能用digest和hexdigest方法。