中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python中hash加密方法怎么使用

發布時間:2022-01-24 09:25:42 來源:億速云 閱讀:363 作者:iii 欄目:開發技術

這篇文章主要介紹“Python中hash加密方法怎么使用”,在日常操作中,相信很多人在Python中hash加密方法怎么使用問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Python中hash加密方法怎么使用”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

    簡介

    概念

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

    Hash簡單點講就是把任意一段數據經過某種算法生成一段唯一的固定長度的數據

    也可以把哈希值當做是文件指紋,因為它是文件唯一性的標志,與每一個字節都有關,當文件發生改變是,指紋值也會改變

    1. 如果把hash算法比喻為一座工廠

    2. 那傳給hash算法的內容就是原材料

    3. 生成的hash值就是生產出的產品

    特點

    • 正向快速:給定明文和 Hash 算法,在有限時間和有限資源內能計算得到 Hash 值

    只要傳入的內容一樣,得到的hash值必然一樣

    • 逆向困難:給定 Hash 值,在有限時間內很難逆推出明文

    • 輸入敏感:原始輸入信息發生任何變化,新的 Hash 值都應該出現很大變化

    • 沖突避免:很難找到兩段內容不同的明文,使得它們的 Hash 值一致

    • 長度固定:只要我們使用是hash算法固定,無論傳入的內容有多大,得到的hash值的長度是固定

    • 信息摘要:hash只是信息的摘要,信息指紋,是用來做數據識別的

    hash有哪些

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

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

    算法碰撞

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

    • 比如“666”經過 Hash 后是“fae0b27c451c728867a567e8c1bb4e53”,相同 Hash 算法得到的值是一樣的。比如 WiFi 密碼如果是 8 位純數字的話,頂多就是 99999999 種可能性,破解這個密碼需要做的就是提前生成好 0 到 1 億數字的 Hash 值,然后做 1 億次布爾運算(就是 Bool 值判斷,0 或者 1),而現在普通 I5 四核 CPU 每秒能到達 200 億次浮點數計算,做 1 億次布爾運算也就是秒級別的時間就破解了

    • 8位大小寫字母、數字、特殊符號組成的密碼,若按照MD5加密,則hash值大概10000千億,i9算力每秒1千億。也需要至少24h。這只是極端情況下,如果加上加密算法不確定(比如3),請求時間(比如3),查詢時間(比如3),這就已經需要半年左右,倘若再加上錯誤等待時間(比如輸入5次錯誤等待24小時),那就已經需要50年。。。

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

    所以密碼盡量不要用純數字,因為根本沒有任何安全性

    加鹽防碰撞

    對數字內容進行 Hash 運算,獲取唯一的摘要值來指代原始完整的數字內容,利用 Hash 函數的抗碰撞性來確保內容未被篡改

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

    加密

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

    在Python中可以利用二個模塊來進行:

    • crypth

    • ashlib

    hashlib

    主要方法

    使用:hashlib.md5()

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

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

    名稱描述
    update(arg)可以重復利用指定了特殊加密算法的Hash對象,對arg進行加密
    digest(…)以字符形式返回加密內容
    hexdigest(…)以16進制形式返回加密內容
    copy(…)為了達到重復利用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()  # 返回加密內容

    直接使用Hash對象中的方法

    import hashlib
     
    # 造出工廠
    m = hashlib.md5()
    # 放入原料
    m.update("Nobody inspects".encode('utf-8'))
    # 產出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'))
    # 產出hash值
    m.digest()
     
    m.update("the spammish repetition".encode("utf-8"))
    m.digest()
    m.hexdigest()

    crypt

    主要方法

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

    使用crypt.crypt(…)進行hash加密的時候,需要提供二個參數:

    • 加密內容

    • salt

    import crypt
     
    salt = crypt.mksalt(crypt.METHOD_SHA512)
    hash = crypt.crypt("helloworld",salt)

    應用

    密碼加密

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

    應用一致性校驗

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

    到此,關于“Python中hash加密方法怎么使用”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    新田县| 宜良县| 蛟河市| 会东县| 九台市| 衡南县| 略阳县| 盐城市| 巴东县| 芦溪县| 吉林市| 陈巴尔虎旗| 浦城县| 固镇县| 固原市| 自治县| 井研县| 山东省| 金塔县| 饶平县| 桂东县| 临沭县| 长岭县| 株洲市| 乌鲁木齐市| 乌什县| 屏东市| 行唐县| 德州市| 重庆市| 翁牛特旗| 沾益县| 大余县| 临夏市| 沧源| 安吉县| 吉林市| 房产| 泽普县| 孙吴县| 彰武县|