摘要演算法又稱雜湊演算法、雜湊演算法。它通過乙個函式,把任意長度的資料轉換為乙個長度固定的資料串(通常用16進製制的字串表示)。摘要演算法就是通過摘要函式f()對任意長度的資料data計算出固定長度的摘要digest,目的是為了發現原始資料是否被人篡改過(不同的data計算出來的摘要不同)。
常見的摘要演算法有md5和sha1
md5
import hashlib
m=hashlib.md5()
m.update('zhangkang')
print(m.hexdigest())
輸出:09b32682a49db34d3c9d7e6d97f85a4a
如果資料太長,可以多次呼叫update(),結果是一樣的
import hashlib
m=hashlib.md5()
m.update('zhang')
m.update('kang') #輸出結果一樣
print(m.hexdigest())
輸出:09b32682a49db34d3c9d7e6d97f85a4a
假如我們改變原始資料中的乙個字母看看計算的md5值是否完全不同
import hashlib
m=hashlib.md5()
m.update('zhangkanf')#輸出結果完全不一樣,雖然只改變乙個字母
print(m.hexdigest())
輸出:17d2bcf39906311768c2f363778d2801
md5是最常見的摘要演算法,速度很快,生成結果是固定的128 bit位元組,通常用乙個32位的16進製制字串表示。
sha1
import hashlib
s=hashlib.sha1()
s.update('my name is zhangkang')
print(s.hexdigest())
輸出:512e877d47cd06246b24ac99027991cbfa67aec1
和md5類似,同樣支援分塊多次update(),只是輸出結果有些區別。sha1的結果是160 bit位元組,通常用乙個40位的16進製制字串表示。
摘要演算法應用
假如我們有乙個**,資料庫中儲存著使用者名稱和密碼等資訊,假設資料庫中的使用者密碼都是明文,那麼一旦資料庫洩露,那麼所有使用者的密碼就會顯而易見。這樣有可能導致使用者的資訊洩露,而正確儲存使用者密碼的方式是不儲存明文密碼,而是儲存密碼的md5值。當使用者登入的時候,先計算密碼的md5值,然後再和資料庫中的比較。有人可能會問,如果密碼的md5值洩露了呢?這個沒關係,因為計算資料的md5值很方便,但是由md5值反推原始資料基本不可能。為了更加安全的保護使用者的密碼資訊,在計算密碼的md5值的時候,建議連同使用者名稱,密碼,或者其他固定字串都一併update(),也就是俗稱的」加鹽」。
#模擬使用者登入
import hashlib
db=#明文密碼是:zhangkang123456
deflogin
(username,password):
m=hashlib.md5()
m.update(username+password+'the-salt')
passwd=m.hexdigest()
if passwd!=db[username]:
return
false
else:return
true
while(true):
username=raw_input('input username:')
password=raw_input('input password:')
if(login(username,password)):
print('login success!')
break
else:
print('login failed!')
MD5摘要演算法實現
網上找到的實現md5函式 包括乙個標頭檔案md5.h和乙個原始檔md5.c,用下面的測試 test.c測試通過,各檔案依次如下 標頭檔案md5.h 1 ifndef md5 h 2 define md5 h 34 typedef struct 5md5 ctx 1011 12 define f x,...
Java中的MD5資訊摘要演算法
所謂md5,即 message digest algorithm 5 資訊 摘要演算法 它由md2 md3 md4發展而來的一種單向函式演算法 也就是hash演算法 它是國際著名的公鑰加密演算法標準rsa的第一設計者r.rivest於上個世紀90年代初開發出來的。md5的最大作用在於,將不同格式的大...
MD5訊息摘要演算法的那些事
1.md5 message digest 訊息摘要演算法 1 md5演算法是一種雜湊 hash 演算法 摘要演算法,指紋演算法 不是一種加密演算法,任何長度的任意內容都可以用md5計算出雜湊值 2 無論字串還是檔案都可以計算md5值,無論字串長短,還是檔案大或者小,計算出來的md5值得位數相同 3 ...