python MD5() 加密


摘要算法

python的hashlib提供了常見的摘要算法,如MD5,SHA1等等。

摘要算法又稱哈希算法,散列算法。它通過一個函數,把任意長度的數據轉換為一個長度固定的數據串(通常用16進制的字符串表示)。

 

摘要算法就是通過摘要函數 f() 對任意長度的數據 date計算出固定長度的摘要 digest,目的是為了發現原始數據是否被人篡改過。

我們以常見的摘要算法MD5為例,計算出一個字符串的MD5值:

1 import hashlib
2 
3 md5 = hashlib.md5()
4 md5.update('how to user md5 in python hashlib?'.encode('utf-8'))
5 print(md5.hexdigest())
計算MD5值

計算結果如下:

4c850bdab2e3c34df385a2a228d2ea04

如果數據量很大,可以分多次調用 update() ,最后的計算結果都是一樣的:

1 import hashlib
2 
3 md5 = hashlib.md5()
4 md5.update('how to user md5 in '.encode('utf-8'))
5 md5.update('python hashlib?'.encode('utf-8'))
6 print(md5.hexdigest())
分多次計算MD5值

計算結果:

4c850bdab2e3c34df385a2a228d2ea04

MD5是最常見的摘要算法,速度很快,生成結果是固定的128 bit字節,通常用一個32位的16進制字符串表示。

另一種常見的摘要算法是SHA1,調用SHA1和調用MD5完全類似:

1 import  hashlib
2 
3 sha1 = hashlib.sha1()
4 sha1.update('how to learning english?'.encode('utf-8'))
5 print(sha1.hexdigest())
計算sha1值

計算結果如下:

983b7e0be6b6d65fabf86149183c428da685d4a5

SHA1的結果是160 bit字節,通常用一個40位的16進制字符串表示。

由於常用口令的MD5值很容易被計算出來,所以,要確保存儲的用戶口令不是那些已經被計算出來的常用口令的MD5,這一方法通過對原始口令加一個復雜字符串來實現,俗稱“加鹽”:

應用:

 1 import hashlib     #導入模塊
 2 
 3 def get_md5(date):
 4     obj = hashlib.md5('iuqe832643873gh'.encode('utf-8'))    #加鹽iuqe832643873gh
 5     obj.update(date.encode('utf-8'))     # date 要加密的數據
 6     result = obj.hexdigest()
 7     return result
 8 val = get_md5('123')
 9 print(val)
10 USER_LIST = []
11 
12 def register():
13     print('************用戶注冊************')
14     while True:
15         user = input('請輸入用戶名:')
16         if user == 'N':
17             return
18         pwd = input('請輸入密碼:')
19         temp = {'username': user, 'password': get_md5(pwd)}
20         USER_LIST.append(temp)
21 
22 def login():
23     print('************用戶登陸************')
24     user = input('請輸入用戶名:')
25     pwd = input('請輸入密碼')
26     for item in USER_LIST:
27          if item['username'] == user and item['password'] == get_md5(pwd):
28              return True
29 
30 register()
31 result = login()
32 if result:
33     print('登陸成功!')
34 else:
35     print('登陸失敗!')
模擬用戶注冊、登錄

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM