首頁 > 後端開發 > Python教學 > Python中hashlib加密模組的分析(程式碼實例)

Python中hashlib加密模組的分析(程式碼實例)

不言
發布: 2018-11-23 17:01:18
轉載
2039 人瀏覽過
這篇文章帶給大家的內容是關於Python中hashlib加密模組的分析(程式碼實例),有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

hashlib模組是用來對字串進行hash加密的模組,明文與密文是一一對應不變的關係;用於註冊、登入時使用者名稱、密碼等加密使用。

一、函數分析

1、共有5種加密演算法

md5(),sha1(),sha224(),sha256() ,sha3840(),sha512(),分別得到不同的加密密文。

2、hashlib.hexdigest():取得加密的密文,16進制,無參數

3、hashlib.digest():取得加密的密文,二進制,無參數

4、hashlib.copy():複製一份目前建立的hash對象,無參數

5、update(str1,encoding('utf-8'')):更新加密的密文,得到的密文與原來的密文不相同

6、hash.name:查看目前獲得的hash物件的加密演算法

7、hash.digest_size:hash密鑰佔多少個位元組

8、hash.block_size:hash資料塊的大小

9、hashlib.algorithms_guaranteed:查看所有平台都支援的hash演算法

#10 、hashlib.algorithms_available:查看所有的hash加密演算法

程式碼實例:

import hashlib

def hash_fun_1(str1):
    #创建一个hahsh对象并对str1加密
    m=hashlib.md5(str1.encode('utf-8'))
    print('获取加密的密文,16进制,无参数',m.hexdigest())
    print('获取加密的密文,二进制,无参数:',m.digest())
    print('获取hash块的大小:',m.block_size)
    print('hash密钥占多少个字节:',m.digest_size)
    print('查看当前获得的hash对象的加密算法',m.name)

    #更新密文
    m.update(str1.encode('utf-8'))
    print('获取加密的密文,16进制,无参数', m.hexdigest())
    print('获取加密的密文,二进制,无参数:', m.digest())
    print('获取hash块的大小:', m.block_size)
    print('hash密钥占多少个字节:', m.digest_size)
    print('查看当前获得的hash对象的加密算法', m.name)

if __name__ == '__main__':
    hash_fun_1('mark')
登入後複製

結果:

获取加密的密文,16进制,无参数 ea82410c7a9991816b5eeeebe195e20a
获取加密的密文,二进制,无参数: b'\xea\x82A\x0cz\x99\x91\x81k^\xee\xeb\xe1\x95\xe2\n'
获取hash块的大小: 64
hash密钥占多少个字节: 16
查看当前获得的hash对象的加密算法 md5
获取加密的密文,16进制,无参数 ac673f4dbac79922838901b5974a419a
获取加密的密文,二进制,无参数: b'\xacg?M\xba\xc7\x99"\x83\x89\x01\xb5\x97JA\x9a'
获取hash块的大小: 64
hash密钥占多少个字节: 16
查看当前获得的hash对象的加密算法 md5
登入後複製

二、運用:

#1、建立哈希對象,有兩種方式:

m=hashlib.new('md5',b'cai')#选择md5加密函数加密字符串‘cai’
m=hashlib.md5('cai'.encode('utf-8'))#加密的另一种写法
登入後複製

2、特性用法:當需要加密的字串過大的時候,可以使用同一個hash對象分多次加密,update( a) update(b)=update(a b)

範例:

import hashlib

m1=hashlib.md5()
m2=m1.copy()
m1.update('a'.encode('utf-8'))
m1.update('b'.encode('utf-8'))
print(m1.hexdigest())#输出密文
m2.update('ab'.encode('utf-8'))
print(m2.hexdigest())#输出另一个密文
登入後複製

運行結果:

187ef4436122d1cc2f40dc2b92f0eba0
187ef4436122d1cc2f40dc2b92f0eba0
登入後複製

三、hash演算法加密

加密演算法得到的密文不可逆,但是密文與明文之間的關係是一一對應的,這就使得解密出現了可能,使用大數據存儲密文與明文對用關係,如果數據庫內剛好有對應的密文,就可以找到明文完成解密,常用的解密網站:http://www.cmd5.com/,輸入密文來找出對於的明文。

為了增加破解的難度,一般需要對密碼進行多次迭代加密,hashlib模組有一個專門的函數。

程式碼實例:

import hashlib
import binascii

#sha256为算法名称,12345678为要加密的密码
#mark指的是杂质,额外添加的东西,使得破解更难
#10 000是迭代次数,可以理解为加密次数
pwd=hashlib.pbkdf2_hmac('sha256',b'12345678',b'mark',10000)
print(binascii.hexlify(pwd).decode('utf-8'))
登入後複製

結果:

129d11e9ba1f3ef4e1393516d434f356363ffe68d7baca37fd1e91f0e87abe36
登入後複製

#

以上是Python中hashlib加密模組的分析(程式碼實例)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:segmentfault.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板