hashlib模塊 md5 sha1

Python的hashlib提供了常見的摘要算法,如MD5,SHA1等等
它經過一個函數,把任意長度的數據轉換爲一個長度固定的數據串(一般用16進制的字符串表示)

對於同一個字符串,無論這個字符串有多長,只要是相同的,
不管在任何環境下,多少次執行,在任何語言中
使用相同的算法\相同的手段獲得的結果永遠是相同的
只要不是相同的字符串,獲得的結果必定不一樣

md5算法,32位的字符串,每一個字符都是一個十六進制
md5算法 效率快 算法相對簡單   須要進行加鹽操做python

 

用法  :算法

1.先建立一個對象安全

2.對象.update('字符串'.encode=('utf-8'))函數

3.print(對象.hexdigest())編碼

 

 

s1 = 'ben'  # 7fe4771c008a22eb763df47d19e2c6aa
s2 = 'abc123'  # c203eb9f0cdbe64ec22e214b759b7ba3

md5_obj = hashlib.md5()  # 1.先建立一個對象
md5_obj.update(s1.encode('utf-8'))  # 2. update(對象.編碼格式)
res = md5_obj.hexdigest()  # 3. 給一個變量接收 對象.hexdigest()
print(res, len(res), type(res))  # 獲得md5值

md5_obj.update(s2.encode('utf-8'))
res2 = md5_obj.hexdigest()
print(res2, len(res2), type(res2))

 

 

小小的輸入生成md5的程序加密

def md5(name):
    name_obj = hashlib.md5()
    name_obj.update(name.encode('utf-8'))
    ret = name_obj.hexdigest()

    return ret


name = input('請輸入你的名字>>>')
my_md5 = md5(name)
print(my_md5)

 

加鹽spa

可能會撞庫,因此必須進行加鹽3d

def md5(name):
    name_obj = hashlib.md5()
    name_obj.update((name + name).encode('utf-8'))  # 能夠給想加密的東西再加上別的字符
    ret = name_obj.hexdigest()

    return ret


name = input('請輸入你的名字>>>')
my_md5 = md5(name)
print(my_md5)

 動態加鹽code

 

username = input('username : ')
passwd = input('password : ')
md5obj = hashlib.md5(username.encode('utf-8'))
md5obj.update(passwd.encode('utf-8'))
print(md5obj.hexdigest())

 

 

文件的一致性校驗 利用md5值是否相同來判斷視頻

 

md5_obj = hashlib.md5()
with open('5.序列化模塊_shelve.py', 'rb') as f:
    md5_obj.update(f.read())
    ret1 = md5_obj.hexdigest()

md5_obj = hashlib.md5()
with open('5.序列化模塊_shelve.py.bak', 'rb') as f:
    md5_obj.update(f.read())
    ret2 = md5_obj.hexdigest()
print(ret1, ret2)

 

 

弱文件太大, 內存讀不下, 能夠:
按行讀: 文本, 視頻, 音樂, 圖片, bytes
按字節讀: 10240 = 1M

 

md5 = hashlib.md5()
md5.update('hello,world,wow'.encode('utf-8'))
ret = md5.hexdigest()
print(ret)  # f733a03f0f1caac0b7ac905f25bf4fd2

md5 = hashlib.md5()
md5.update('hello,'.encode('utf-8'))
md5.update('world,'.encode('utf-8'))
md5.update('wow'.encode('utf-8'))
ret = md5.hexdigest()
print(ret)

 

 

大文件的已執行校驗 

循環的讀取文件內容

循環的來update

md5_obj = hashlib.md5()

with open('file', 'rb') as f:
    md5_obj.update(f.read())
    # 循環的讀取文件內容
    # 循環的來update
print(md5_obj.hexdigest())

 

sha1也是一個算法, 40位的字符串, 每一個字符都是一個十六進制 算法相對複雜 計算速度也慢 用的人少,因此會比md5更安全一點 和md5用法同樣

sha_obj = hashlib.sha1()
sha_obj.update(s1.encode('utf-8'))
res = sha_obj.hexdigest()
print(res, len(res), type(res))

 

 

 

小練習

# 寫成一個函數
# 參數 : 文件1的路徑,文件2的路徑,默認參數 = 1024000
# 計算這兩個文件的md5值
# 返回它們的一致性結果 T/F
相關文章
相關標籤/搜索