Python中摘要演算法MD5,SHA1講解

2021-08-09 15:14:49 字數 2059 閱讀 6579

摘要演算法又稱雜湊演算法、雜湊演算法。它通過乙個函式,把任意長度的資料轉換為乙個長度固定的資料串(通常用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 ...