最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python?hashlib模塊詳細(xì)講解使用方法

 更新時間:2022年11月09日 16:50:06   作者:Python熱愛者  
hashlib?是一個提供了一些流行的hash算法的?Python?標(biāo)準(zhǔn)庫.其中所包括的算法有?md5,?sha1,?sha224,?sha256,?sha384,?sha512.?另外,模塊中所定義的?new(name,?string=”)?方法可通過指定系統(tǒng)所支持的hash算法來構(gòu)造相應(yīng)的hash對象

1.hashlib的簡介

hashlib 是一個提供了一些流行的hash(摘要)算法的Python標(biāo)準(zhǔn)庫.其中所包括的算法有 md5, sha1, sha224, sha256, sha384, sha512等

什么是摘要算法呢?摘要算法又稱哈希算法、散列算法。它通過一個函數(shù),把任意長度的數(shù)據(jù)轉(zhuǎn)換為一個長度固定的數(shù)據(jù)串(通常用16進制的字符串表示)。更多請看:hashlib — 安全哈希與消息摘要

2.hashlib的使用

本文以hashlib中MD5算法為例,其他的sha224、sha256算法用法和MD5基本一致。

1. 常用屬性

hashlib.algorithms
#列出所有加密算法
h.digest_size
#產(chǎn)生的散列字節(jié)大小。
h.block_size
#哈希內(nèi)部塊的大小

2. 常用方法

hash.new([arg])
# 創(chuàng)建指定加密模式的hash對象
hash.update(arg)
# 更新哈希對象以字符串參數(shù)。如果同一個hash對象重復(fù)調(diào)用該方法,m.update(a); m.update(b) 等價于 m.update(a+b)
hash.digest()
# 返回摘要,作為二進制數(shù)據(jù)字符串值。
hash.hexdigest()
# 返回摘要,作為十六進制數(shù)據(jù)字符串值
hash.copy()
# 復(fù)制

3. 使用示例

# MD5 的使用
#其它的sha1,sha256就是加密函數(shù)不一樣,其余基本相同,這里就不演示了
import hashlib
def jm_md5(password):
    m = hashlib.md5()  # 構(gòu)建MD5對象
    m.update(password.encode(encoding='utf-8')) #設(shè)置編碼格式 并將字符串添加到MD5對象中
    password_md5 = m.hexdigest()  # hexdigest()將加密字符串 生成十六進制數(shù)據(jù)字符串值
    return password, password_md5
g = jm_md5('123456')
print(g)

#結(jié)果輸出:
('123456', 'e10adc3949ba59abbe56e057f20f883e')

3.hashlib的特點

  • 摘要算法在很多地方都有廣泛的應(yīng)用。
  • 要注意摘要算法不是加密算法,不能用于加密(因為無法通過摘要反推明文),只能用于防篡改。
  • 它的單向計算特性決定了可以在不存儲明文口令的情況下驗證用戶口令。

一個優(yōu)秀的 hash 算法,將能實現(xiàn):

  • 正向快速:給定明文和 hash 算法,在有限時間和有限資源內(nèi)能計算出 hash 值。
  • 逆向困難:給定(若干) hash 值,在有限時間內(nèi)很難(基本不可能)逆推出明文。
  • 輸入敏感:原始輸入信息修改一點信息,產(chǎn)生的 hash 值看起來應(yīng)該都有很大不同。
  • 沖突避免:很難找到兩段內(nèi)容不同的明文,使得它們的 hash 值一致(發(fā)生沖突)。即對于任意兩個不同的數(shù)據(jù)塊,其hash值相同的可能性極??;對于一個給定的數(shù)據(jù)塊,找到和它hash值相同的數(shù)據(jù)塊極為困難。

4.實際演示

1. 基本演示

import hashlib
# 一、在構(gòu)建對象直接插入加密字符串
m1 = hashlib.md5('hello python'.encode(encoding='utf-8'))  # 構(gòu)建MD5對象
print(m1.hexdigest())   # 結(jié)果為: e53024684c9be1dd3f6114ecc8bbdddc
# 二、通過update方法 往MD5對象中增加字符串參數(shù)
m2 = hashlib.md5()  # 構(gòu)建MD5對象
m2.update('hello python'.encode(encoding='utf-8')) # 設(shè)置編碼格式 并將字符串添加到MD5對象中
password_md5 = m2.hexdigest()
print(m2.hexdigest())   # 結(jié)果為 e53024684c9be1dd3f6114ecc8bbdddc
# 三、當(dāng)數(shù)據(jù)量過過大時,可以分塊摘要,例如:
m3 = hashlib.md5()
m3.update("hello ".encode("utf-8"))  # 注意:分塊是空格也要保持一致
m3.update("python".encode("utf-8"))
print(m3.hexdigest())  # 結(jié)果為:e53024684c9be1dd3f6114ecc8bbdddc
# MD5是最常見的摘要算法,速度很快,生成結(jié)果是固定的128 bit字節(jié),通常用一個32位的16進制字符串表示。

三種方式,往構(gòu)造的MD5對象中傳參,只要傳參的字符串一致,最后生成的結(jié)果是一樣的。

這說明hash算法就像一座工廠,工廠接收你送來的原材料(可以用m.update()為工廠運送原材料),經(jīng)過加工返回的產(chǎn)品就是hash值。這也是摘要算法的一個特點,它不是加密算法,不能用于加密(因為無法通過摘要反推明文),只能用于防篡改。

2. 應(yīng)用場景案例

hashlib模塊主要應(yīng)用于,用戶賬號密碼登錄,對明文密碼進行加密等

'''
學(xué)習(xí)中遇到問題沒人解答?小編創(chuàng)建了一個Python學(xué)習(xí)交流群:711312441
尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學(xué)習(xí)教程和PDF電子書!
'''
import hashlib
USER_LIST = []
def pwd_Md5(password):
    password = password+'hello python'  # 字符串混淆加鹽,可以設(shè)置更復(fù)雜一點
    return hashlib.md5(password.encode("utf-8")).hexdigest()
def register():
    print('**************用戶注冊**************')
    while True:
        user = input('請輸入用戶名:')
        if user.isalpha():
            break
    while True:
        password1 = input('請輸入密碼>>>:').strip()
        passwprd2 = input('請重復(fù)密碼>>>:').strip()
        if password1 == passwprd2:
            password = pwd_Md5(password1)  # 將密碼進行Md5加密
            break
        else:
            print('密碼不正確,重新輸入!')
    temp = {'username':user,'password':password}
    USER_LIST.append(temp)
def login():
    print('**************用戶登陸**************')
    user = input('請輸入用戶名:')
    pwd = input('請輸入密碼:')
    for item in USER_LIST:  
        if item['username'] == user and item['password'] == pwd_Md5(pwd):
            return True
if __name__=='__main__':
    register()
    if login():
        print('登陸成功')
    else:
        print('登陸失敗')

#結(jié)果輸出:
**************用戶注冊**************
請輸入用戶名:lizexiong
請輸入密碼>>>:123456
請重復(fù)密碼>>>:123456
**************用戶登陸**************
請輸入用戶名:lizexiong
請輸入密碼:123456
登陸成功

用戶登錄需要使用密碼,密碼一定要加密,保證用戶的信息安全。

  • 加密可以使用hashlib模塊進行加密。
  • 加密可以寫成加密函數(shù),方便多處調(diào)用
  • 提高密碼解密的復(fù)雜性,代碼中多加字符串。(加密算法雖然依然非常厲害,但是也存在缺陷,即:通過撞庫可以反解。所以,有必要對加密密碼進行加鹽。)

到此這篇關(guān)于Python hashlib模塊詳細(xì)講解使用方法的文章就介紹到這了,更多相關(guān)Python hashlib模塊內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 如何讓python的運行速度得到提升

    如何讓python的運行速度得到提升

    在本篇文章里小編給大家分享了關(guān)于如何讓python的運行速度得到提升的方法和技巧,需要的朋友們可以學(xué)習(xí)下。
    2020-07-07
  • Python3+cgroupspy安裝使用簡介

    Python3+cgroupspy安裝使用簡介

    cgroups是Control groups的簡稱,是Linux內(nèi)核提供的一種限制進程使用和種系統(tǒng)資源的特性,這篇文章主要介紹了Python3+cgroupspy安裝使用教程,需要的朋友可以參考下
    2023-04-04
  • Python SQLite3數(shù)據(jù)庫操作類分享

    Python SQLite3數(shù)據(jù)庫操作類分享

    這篇文章主要介紹了Python SQLite3數(shù)據(jù)庫操作類分享,需要的朋友可以參考下
    2014-06-06
  • Python機器學(xué)習(xí)之基礎(chǔ)概述

    Python機器學(xué)習(xí)之基礎(chǔ)概述

    今天帶大家回顧python機器學(xué)習(xí)的相關(guān)知識,文中非常詳細(xì)的介紹了Python機器學(xué)習(xí)的基礎(chǔ)概述,算法分類及研究內(nèi)容,需要的朋友可以參考下
    2021-05-05
  • Python教程之Python多態(tài)的深層次理解

    Python教程之Python多態(tài)的深層次理解

    相信很多在學(xué)Python的朋友都有了解過多態(tài),本篇文章來帶大家更進一步的深入了解Python多態(tài),有需要的朋可以借鑒參考下,希望可以有所幫助
    2021-09-09
  • python使用KNN算法識別手寫數(shù)字

    python使用KNN算法識別手寫數(shù)字

    這篇文章主要為大家詳細(xì)介紹了python使用KNN算法識別手寫數(shù)字,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • 如何在Python項目中做多環(huán)境配置(環(huán)境變量使用.env文件)

    如何在Python項目中做多環(huán)境配置(環(huán)境變量使用.env文件)

    實際工程開發(fā)中常常會對開發(fā)、測試和生產(chǎn)等不同環(huán)境配置不同的數(shù)據(jù)庫環(huán)境,傳統(tǒng)方式可以通過添加不同環(huán)境的配置文件達(dá)到部署時的動態(tài)切換的效果,這篇文章主要給大家介紹了關(guān)于如何在Python項目中做多環(huán)境配置的相關(guān)資料,環(huán)境變量使用.env文件,需要的朋友可以參考下
    2024-06-06
  • PyQt5超詳細(xì)入門級教程(推薦!)

    PyQt5超詳細(xì)入門級教程(推薦!)

    PyQt5是Python編程語言的一個模塊,它提供了一種在Python中使用Qt庫的方式,下面這篇文章主要給大家介紹了關(guān)于PyQt5超詳細(xì)入門級教程的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-09-09
  • python?opencv圖像的高通濾波和低通濾波的示例代碼

    python?opencv圖像的高通濾波和低通濾波的示例代碼

    這篇文章主要介紹了python?opencv圖像的高通濾波和低通濾波,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • 深入了解Python 方法之類方法 & 靜態(tài)方法

    深入了解Python 方法之類方法 & 靜態(tài)方法

    這篇文章主要介紹了Python類方法 & 靜態(tài)方法的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下
    2020-08-08

最新評論

门头沟区| 佛坪县| 四子王旗| 汝州市| 泗洪县| 麻阳| 高尔夫| 江城| 西乌珠穆沁旗| 阳信县| 广州市| 民县| 延吉市| 光泽县| 辉南县| 双辽市| 探索| 遂宁市| 阜阳市| 库尔勒市| 徐水县| 嘉黎县| 邵东县| 舒兰市| 云龙县| 衡东县| 加查县| 襄樊市| 沧州市| 莱西市| 西城区| 冷水江市| 杭锦旗| 靖安县| 外汇| 巴东县| 皮山县| 景德镇市| 隆昌县| 盐池县| 泰顺县|