国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python中使用hashlib模塊處理算法的教程

2020-02-23 00:56:43
字體:
來源:轉載
供稿:網友

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

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

舉個例子,你寫了一篇文章,內容是一個字符串'how to use python hashlib - by Michael',并附上這篇文章的摘要是'2d73d4f15c0db7f5ecb321b6a65e5d6d'。如果有人篡改了你的文章,并發表為'how to use python hashlib - by Bob',你可以一下子指出Bob篡改了你的文章,因為根據'how to use python hashlib - by Bob'計算出的摘要不同于原始文章的摘要。

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

摘要算法之所以能指出數據是否被篡改過,就是因為摘要函數是一個單向函數,計算f(data)很容易,但通過digest反推data卻非常困難。而且,對原始數據做一個bit的修改,都會導致計算出的摘要完全不同。

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

import hashlibmd5 = hashlib.md5()md5.update('how to use md5 in python hashlib?')print md5.hexdigest()

計算結果如下:

d26a53750bc40b38b65a520292f69306

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

md5 = hashlib.md5()md5.update('how to use md5 in ')md5.update('python hashlib?')print md5.hexdigest()

試試改動一個字母,看看計算的結果是否完全不同。

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

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

import hashlibsha1 = hashlib.sha1()sha1.update('how to use sha1 in ')sha1.update('python hashlib?')print sha1.hexdigest()

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

比SHA1更安全的算法是SHA256和SHA512,不過越安全的算法越慢,而且摘要長度更長。

有沒有可能兩個不同的數據通過某個摘要算法得到了相同的摘要?完全有可能,因為任何摘要算法都是把無限多的數據集合映射到一個有限的集合中。這種情況稱為碰撞,比如Bob試圖根據你的摘要反推出一篇文章'how to learn hashlib in python - by Bob',并且這篇文章的摘要恰好和你的文章完全一致,這種情況也并非不可能出現,但是非常非常困難。
摘要算法應用

摘要算法能應用到什么地方?舉個常用例子:

任何允許用戶登錄的網站都會存儲用戶登錄的用戶名和口令。如何存儲用戶名和口令呢?方法是存到數據庫表中:

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 靖远县| 尚志市| 威信县| 泰兴市| 亳州市| 高淳县| 巴林右旗| 临城县| 客服| 双城市| 遂昌县| 凯里市| 巴里| 体育| 贵德县| 鹿泉市| 通辽市| 湖州市| 进贤县| 山东| 万山特区| 千阳县| 清涧县| 丰顺县| 和顺县| 新安县| 临泽县| 台中市| 连山| 睢宁县| 凤城市| 临泉县| 瑞昌市| 宁阳县| 凤台县| 东乡族自治县| 枣阳市| 正定县| 双鸭山市| 克什克腾旗| 读书|