溫馨提示×

溫馨提示×

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

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

Python?base64和hashlib模塊如何使用

發(fā)布時間:2023-02-24 11:09:33 來源:億速云 閱讀:115 作者:iii 欄目:開發(fā)技術(shù)

本文小編為大家詳細介紹“Python base64和hashlib模塊如何使用”,內(nèi)容詳細,步驟清晰,細節(jié)處理妥當,希望這篇“Python base64和hashlib模塊如何使用”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學(xué)習(xí)新知識吧。

    一、base64模塊

    base64模塊提供了在二進制數(shù)據(jù)和可打印ASCII字符間編解碼的功能,包括 RFC3548中定義的Base16, Base32, Base64, Ascii85, Base85等編碼。

    base64模塊屬于標準庫,無需進行安裝,導(dǎo)入即可使用。

    base64模塊支持兩種接口:

    • bytes類型數(shù)據(jù)進行base64編碼。即將類字節(jié)對象編碼為由ASCII可打印字符表示的bytes。

    • base64編碼的bytes類型進行解碼。即將類字節(jié)對象或純ASCII字符組成的Unicode字符串解碼為bytes。

    注意:編碼與解碼的處理對象是byte,及參數(shù)必須是二進制數(shù)據(jù),才可以進行正常使用。

    1、對字符串編解碼

    import base64
    
    str = "Hello Python"
    
    # 默認以utf-8編碼
    byte_str = str.encode("utf-8")
    b64_str = base64.b64encode(byte_str)
    print(b64_str)
    
    print("-------------")
    
    # 默認以utf-8解碼
    byte_str2 = base64.b64decode(b64_str)
    str2 = byte_str2.decode("utf-8")
    print(str2)

    Python?base64和hashlib模塊如何使用

    2、對URL編解碼

    import base64
    
    url = "http://www.baidu.com?k1=v1&k2=值二"
    
    # 默認以utf-8編碼
    byte_url = url.encode("utf-8")
    b64_url = base64.b64encode(byte_url)
    print(b64_url)  # b'aHR0cDovL3d3dy5iYWlkdS5jb20/azE9djEmazI95YC85LqM'
    
    print("-------------")
    
    # 默認以utf-8解碼
    byte_url2 = base64.b64decode(b64_url)
    url2 = byte_url2.decode("utf-8")
    print(url)  # http://www.baidu.com?k1=v1&k2=值二

    二、hashlib模塊

    1、hashlib模塊

    hashlib是Python的內(nèi)置模塊,提供了多種安全方便的常見摘要算法,其中主要包括MD5,SHA1,SHA256,SHA384,SHA512等。這些摘要方法在使用上通用,返回帶有同樣接口的hash對象,對算法的選擇,差別只在于構(gòu)造方法的選擇。

    摘要算法又稱哈希算法、散列算法。它通過一個函數(shù)算法,把任意長度的數(shù)據(jù)轉(zhuǎn)換為一個長度固定的數(shù)據(jù)串)。

    1.1 常用屬性
    import hashlib
    
    #列出hashlib內(nèi)容
    print(dir(hashlib))
    #列出所有加密算法
    print(hashlib.algorithms_available) 
    print(hashlib.algorithms_guaranteed)
    
    #產(chǎn)生的散列字節(jié)大小。
    h.digest_size
    
    #哈希內(nèi)部塊的大小
    h.block_size
    1.2 常用方法
    # 創(chuàng)建指定加密模式的hash對象
    hash.new([arg])
    
    # 更新哈希對象以字符串參數(shù)。
    # 如果同一個hash對象重復(fù)調(diào)用該方法,m.update(a); m.update(b) 等價于 m.update(a+b)
    hash.update(arg)
    
    # 返回摘要,作為二進制數(shù)據(jù)字符串值。
    hash.digest()
    
    # 返回摘要,作為十六進制數(shù)據(jù)字符串值
    hash.hexdigest()
    
    # 復(fù)制
    hash.copy()
    1.3 使用步驟

    方式一:

    import hashlib
    
    # -------以 MD5為例-------
    # 1. 創(chuàng)建hash工廠
    m = hashlib.md5()
    
    # 2. 在內(nèi)存里面加載二進制數(shù)據(jù)
    # m.update('Hello'.encode('utf-8'))
    # m.update('Python'.encode('utf-8'))
    ## 等價于,如果二進制數(shù)據(jù)很長的話,可以分開更新
    m.update('Hello Python'.encode('utf-8'))
    
    print(m.digest_size)  # 16
    print(m.block_size)  # 64
    
    # 3、返回十六進制str摘要值
    hash_value = m.hexdigest()
    print(hash_value)  # a709c173220d6185d12248faa9f40ac8
    
    # 3.返回bytes格式的消息摘要
    print(m.digest())  # b'\xa7\t\xc1s"\ra\x85\xd1"H\xfa\xa9\xf4\n\xc8'

    方式二:

    import hashlib
    
    '''
    一個通用的構(gòu)造方法,
        name:是某個算法的字符串名稱,
        data:是可選的bytes類型待摘要的數(shù)據(jù)。
    '''
    m = hashlib.new('md5', b'Hello Python')
    print(m.hexdigest())
    print(m.digest())
    
    print("-----復(fù)制方法測試-----")
    
    # 復(fù)制
    m2 = m.copy()
    print(m2)
    print(m2.hexdigest())
    print(m2.digest())

    Python?base64和hashlib模塊如何使用

    2、MD5(消息摘要算法)

    MD5消息摘要算法(英語:MD5 Message-Digest Algorithm),一種被廣泛使用的密碼雜湊函數(shù),可以產(chǎn)生出一個128位的散列值(hash value),用于確保信息傳輸完整一致。

    示例代碼如下:

    import hashlib
    
    def jm_md5(password):
        # 構(gòu)建MD5對象
        m = hashlib.md5()
        # 自定義加鹽值
        m.update('abc'.encode(encoding='utf-8'))
        m.update(password.encode(encoding='utf-8'))
        # 返回十六進制str摘要值
        password_md5 = m.hexdigest()
        return password, password_md5
    res = jm_md5('123456')
    print(res) # ('123456', '0659c7992e268962384eb17fafe88364')

    3、SHA-256(安全哈希算法)

    安全哈希算法(Secure Hash Algorithm)主要適用于數(shù)字簽名標準(Digital Signature Standard DSS)里面定義的數(shù)字簽名算法(Digital Signature Algorithm DSA)。驗證數(shù)據(jù)的完整性。

    科學(xué)家們推出了SHA1,SHA224,SHA256,SHA384,SHA512,當然位數(shù)越長,破解難度越大,但同時生成加密的消息摘要所耗時間也更長。常用的還是SHA-256。

    示例代碼如下:

    import hashlib
    
    def jm_sha256(password):
        # 構(gòu)建MD5對象
        m = hashlib.sha256()
        # m = hashlib.sha512()
    
        # 自定義加鹽值
        m.update('abc'.encode(encoding='utf-8'))
        m.update(password.encode(encoding='utf-8'))
        # 返回十六進制str摘要值
        password_md5 = m.hexdigest()
        return password, password_md5
    res = jm_sha256('123456')
    print(res) 
    # ('123456', 'a03c32fcd351cba2d9738622b083bed022ef07793bd92b59faea0207653f371d')

    讀到這里,這篇“Python base64和hashlib模塊如何使用”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領(lǐng)會,如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注億速云行業(yè)資訊頻道。

    向AI問一下細節(jié)

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

    AI