Hash函數(shù)

摘要算法又稱為哈希算法,散列算法。它通過一個函數(shù),把任意長度的數(shù)據(jù)轉(zhuǎn)換為一個長度固定的數(shù)據(jù)串(通常用16進制的字符串表示)用于加密相關的操作。
圖解MD5: https://mp.weixin.qq.com/s/n7OnxPwslilW8nSBjQ719A

1.Python3實現(xiàn)MD5
import hashlib
def get_md5(str1):
    m = hashlib.md5()
    m.update(str1.encode('utf-8'))
    return m.hexdigest()
if __name__ == '__main__':
    print(get_md5('password'))

hashlib提供主要提供SHA1,SHA224,SHA256,SHA384,SHA512,MD5算法
以上加密算法雖然很厲害,但仍然存在缺陷,通過撞庫可以反解。所以必要對加密算法中添加自定義key再來做加密.其實加鹽是為了應對這么一種情況:如果兩個人或多個人的密碼相同,那么通過相同的加密算法得到的是相同的結(jié)果。這樣會造成哪些后果呢?首先,破解一個就有可能是相當于破一片密碼。而且加入小明這個用戶可以查看后臺數(shù)據(jù)庫,那么如果他觀察到小紅這個用戶的密碼跟自己的密碼是一樣的(雖然都是密文),那么,也就代表他們兩個人的密碼是相同的。所以他就可以用小紅的身份進行登錄了。
其實,我們只要稍微混淆一下就能防范住了,這在加密術語中稱為“加鹽”。具體來說就是在原有材料(用戶自定義密碼)中加入其他成分(一般是用戶自有且不變的因素),以此來增加系統(tǒng)復雜度。當這種鹽和用戶密碼結(jié)合后,再通過摘要處理,就能得到隱蔽性更強的摘要值。

import hashlib
hash = hashlib.md5('python'.encode('utf-8'))
hash.update('password'.encode('utf-8'))
print(hash.hexdigest())
2.SHA1
import hashlib
def get_sha1(str1):
    m = hashlib.sha1()
    m.update(str1.encode('utf-8'))
    return m.hexdigest()
if __name__ == '__main__':
    print(get_sha1('password'))
3.獲取文件md5值
import hashlib
import os
def md5sum(filename):
        """
        用于獲取文件的md5值
        :param filename: 文件名
        :return: MD5碼
        """
        if not os.path.isfile(filename):  # 如果校驗md5的文件不是文件,返回空
            return
        myhash = hashlib.md5()
        f = open(filename, 'rb')
        while True:
            b = f.read(8096)
            if not b:
                break
            myhash.update(b)   
        f.close()
        return myhash.hexdigest()

print(md5sum('filepath'))
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容