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

Python中hash加密簡介及使用方法

 更新時(shí)間:2022年01月23日 11:33:34   作者:A-L-Kun  
常見 Hash 算法有 MD5 和 SHA 系列,目前 MD5 和 SHA1 已經(jīng)被破解,一般推薦至少使用 SHA2-256 算法,接下來通過本文給大家介紹Python中hash加密簡介及使用方法,感興趣的朋友一起看看吧

簡介

概念

散列算法(Hash Algorithm),又稱哈希算法,雜湊算法,是一種從任意文件中創(chuàng)造小的數(shù)字「指紋」的方法。與指紋一樣,散列算法就是一種以較短的信息來保證文件唯一性的標(biāo)志,這種標(biāo)志與文件的每一個(gè)字節(jié)都相關(guān),而且難以找到逆向規(guī)律。因此,當(dāng)原有文件發(fā)生改變時(shí),其標(biāo)志值也會發(fā)生改變,從而告訴文件使用者當(dāng)前的文件已經(jīng)不是你所需求的文件

Hash簡單點(diǎn)講就是把任意一段數(shù)據(jù)經(jīng)過某種算法生成一段唯一的固定長度的數(shù)據(jù)

也可以把哈希值當(dāng)做是文件指紋,因?yàn)樗俏募ㄒ恍缘臉?biāo)志,與每一個(gè)字節(jié)都有關(guān),當(dāng)文件發(fā)生改變是,指紋值也會改變

  1. 如果把hash算法比喻為一座工廠
  2. 那傳給hash算法的內(nèi)容就是原材料
  3. 生成的hash值就是生產(chǎn)出的產(chǎn)品

特點(diǎn)

  • 正向快速:給定明文和 Hash 算法,在有限時(shí)間和有限資源內(nèi)能計(jì)算得到 Hash 值

只要傳入的內(nèi)容一樣,得到的hash值必然一樣

  • 逆向困難:給定 Hash 值,在有限時(shí)間內(nèi)很難逆推出明文
  • 輸入敏感:原始輸入信息發(fā)生任何變化,新的 Hash 值都應(yīng)該出現(xiàn)很大變化
  • 沖突避免:很難找到兩段內(nèi)容不同的明文,使得它們的 Hash 值一致
  • 長度固定:只要我們使用是hash算法固定,無論傳入的內(nèi)容有多大,得到的hash值的長度是固定
  • 信息摘要:hash只是信息的摘要,信息指紋,是用來做數(shù)據(jù)識別的

hash有哪些

常見 Hash 算法有 MD5 和 SHA 系列,目前 MD5 和 SHA1 已經(jīng)被破解,一般推薦至少使用 SHA2-256 算法

哈希算法輸出長度(bit)輸出長度(字節(jié))
MD5128 bit16 bytes
RipeMD160160 bits20 bytes
SHA-1160 bits20 bytes
SHA-256256 bits32 bytes
SHA-512512 bits64 bytes

算法碰撞

稍微想一下就可以發(fā)現(xiàn),既然輸入數(shù)據(jù)長度不固定,而輸出的哈希值卻是固定長度的,這意味著哈希值是一個(gè)有限集合,而輸入數(shù)據(jù)則可以是無窮多個(gè),那么建立一對一關(guān)系明顯是不現(xiàn)實(shí)的。所以“碰撞”是必然會發(fā)生的,所以一個(gè)成熟的哈希算法會有較好的抗沖突性,同時(shí)在實(shí)現(xiàn)哈希表的結(jié)構(gòu)時(shí)也要考慮到哈希沖突的問題

  • 比如“666”經(jīng)過 Hash 后是“fae0b27c451c728867a567e8c1bb4e53”,相同 Hash 算法得到的值是一樣的。比如 WiFi 密碼如果是 8 位純數(shù)字的話,頂多就是 99999999 種可能性,破解這個(gè)密碼需要做的就是提前生成好 0 到 1 億數(shù)字的 Hash 值,然后做 1 億次布爾運(yùn)算(就是 Bool 值判斷,0 或者 1),而現(xiàn)在普通 I5 四核 CPU 每秒能到達(dá) 200 億次浮點(diǎn)數(shù)計(jì)算,做 1 億次布爾運(yùn)算也就是秒級別的時(shí)間就破解了
  • 8位大小寫字母、數(shù)字、特殊符號組成的密碼,若按照MD5加密,則hash值大概10000千億,i9算力每秒1千億。也需要至少24h。這只是極端情況下,如果加上加密算法不確定(比如3),請求時(shí)間(比如3),查詢時(shí)間(比如3),這就已經(jīng)需要半年左右,倘若再加上錯(cuò)誤等待時(shí)間(比如輸入5次錯(cuò)誤等待24小時(shí)),那就已經(jīng)需要50年。。。

當(dāng)然,如果有三萬臺電腦同時(shí)破解,也還是一天 -_-|||。
不過道高一尺,魔高一丈。誰又會傻乎乎的一個(gè)站著打一個(gè)等著挨。都是相對的

所以密碼盡量不要用純數(shù)字,因?yàn)楦緵]有任何安全性

加鹽防碰撞

對數(shù)字內(nèi)容進(jìn)行 Hash 運(yùn)算,獲取唯一的摘要值來指代原始完整的數(shù)字內(nèi)容,利用 Hash 函數(shù)的抗碰撞性來確保內(nèi)容未被篡改

常用于用戶名和密碼來確保用戶信息安全,為了防止攻擊會采用加鹽的方法,就是原來的明文加上一個(gè)隨機(jī)數(shù)之后的 Hash 值,Hash 值和鹽會保存在兩個(gè)地方,只要不是同時(shí)泄漏就很難被破解

加密

如果在Python中需要對用戶輸入的密碼或者其他內(nèi)容進(jìn)行加密,首選的方法是生成hash值

在Python中可以利用二個(gè)模塊來進(jìn)行:

  • crypth
  • ashlib

hashlib

主要方法

使用:hashlib.md5()

名稱描述
md5(…)利用md5算法加密
sha1(…)利用sha1算法加密
sha224(…)利用sha224算法加密
sha256(…)利用sha256算法加密
sha384(…)利用sha384算法加密
sha512(…)利用sha512算法加密

特有方法

如果你利用hashlib生成了一個(gè)Hash對象,那么這個(gè)Hash對象會包含如下方法

名稱描述
update(arg)可以重復(fù)利用指定了特殊加密算法的Hash對象,對arg進(jìn)行加密
digest(…)以字符形式返回加密內(nèi)容
hexdigest(…)以16進(jìn)制形式返回加密內(nèi)容
copy(…)為了達(dá)到重復(fù)利用Hash對象的目的,而克隆Hash對象

使用方法

直接使用hashlib方法

import hashlib
 
hashlib.sha224("Nobody inspects the spammish repetition".encode("utf-8"))  # 加密
hashlib.sha224("Nobody inspects the spammish repetition".encode("utf-8")).hexdigest()  # 返回加密內(nèi)容

直接使用Hash對象中的方法

import hashlib
 
# 造出工廠
m = hashlib.md5()
# 放入原料
m.update("Nobody inspects".encode('utf-8'))
# 產(chǎn)出hash值
m.digest()
 
m.update("the spammish repetition".encode("utf-8"))
m.digest()
m.hexdigest()

加鹽

import hashlib
 
# 造出工廠
m = hashlib.md5("this is salt".encode("utf-8"))
# 放入原料
m.update("Nobody inspects".encode('utf-8'))
# 產(chǎn)出hash值
m.digest()
 
m.update("the spammish repetition".encode("utf-8"))
m.digest()
m.hexdigest()

crypt

主要方法

名稱類型描述
crypt(…)方法對指定內(nèi)容進(jìn)行hash加密
mksalt(…)方法根據(jù)加密算法生成salt
methodslist返回可用加密算法的列表
MOTHOD_CRYPT常量加密算法
METHOD_MD5常量md5加密算法
METHOD_SHA256常量sha256加密算法
METHOD_SHA512常量sha512加密算法

使用說明

使用crypt.crypt(…)進(jìn)行hash加密的時(shí)候,需要提供二個(gè)參數(shù):

  • 加密內(nèi)容
  • salt
import crypt
 
salt = crypt.mksalt(crypt.METHOD_SHA512)
hash = crypt.crypt("helloworld",salt)

應(yīng)用

密碼加密

m=hashlib.md5()
 
m.update('key'.encode('utf-8'))      #添加個(gè)其他元素,提升密碼復(fù)雜度,不是加鹽
m.update(password.encode('utf-8'))
print(m.hexdigest()) 

應(yīng)用一致性校驗(yàn)

m = hashlib.md5()
with open(r'E:\01.mp4','rb') as f:
    for line in f:  
        m.update(line)
        
print(m.hexdigest)

到此這篇關(guān)于Python中hash加密的文章就介紹到這了,更多相關(guān)Python hash加密內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python編程冒泡排序法實(shí)現(xiàn)動圖排序示例解析

    python編程冒泡排序法實(shí)現(xiàn)動圖排序示例解析

    這篇文章主要介紹了python編程中如何使用冒泡排序法實(shí)現(xiàn)動圖排序的示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2021-10-10
  • python使用numpy按一定格式讀取bin文件的實(shí)現(xiàn)

    python使用numpy按一定格式讀取bin文件的實(shí)現(xiàn)

    這篇文章主要介紹了python使用numpy按一定格式讀取bin文件的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • 微信跳一跳python代碼實(shí)現(xiàn)

    微信跳一跳python代碼實(shí)現(xiàn)

    這篇文章主要為大家詳細(xì)介紹了微信跳一跳python代碼實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • Python如何利用Har文件進(jìn)行遍歷指定字典替換提交的數(shù)據(jù)詳解

    Python如何利用Har文件進(jìn)行遍歷指定字典替換提交的數(shù)據(jù)詳解

    這篇文章主要給大家介紹了關(guān)于Python如何利用Har文件進(jìn)行遍歷指定字典替換提交的數(shù)據(jù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • python基礎(chǔ) range的用法解析

    python基礎(chǔ) range的用法解析

    這篇文章主要介紹了python基礎(chǔ) range的用法解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • 對python3中pathlib庫的Path類的使用詳解

    對python3中pathlib庫的Path類的使用詳解

    今天小編就為大家分享一篇對python3中pathlib庫的Path類的使用詳解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • 解析python 類方法、對象方法、靜態(tài)方法

    解析python 類方法、對象方法、靜態(tài)方法

    這篇文章主要介紹了解析python 類方法、對象方法、靜態(tài)方法的的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下
    2020-08-08
  • Python3 常用數(shù)據(jù)標(biāo)準(zhǔn)化方法詳解

    Python3 常用數(shù)據(jù)標(biāo)準(zhǔn)化方法詳解

    這篇文章主要介紹了Python3 常用數(shù)據(jù)標(biāo)準(zhǔn)化方法詳解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • 如何在Django配置文件里配置session鏈接

    如何在Django配置文件里配置session鏈接

    這篇文章主要介紹了如何在Django配置文件里配置session鏈接,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • python防止棧溢出的實(shí)例講解

    python防止棧溢出的實(shí)例講解

    在本篇文章里小編給大家整理了一篇關(guān)于python防止棧溢出的實(shí)例講解內(nèi)容,有興趣的朋友們可以學(xué)習(xí)參考下。
    2021-05-05

最新評論