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