一,HASH
Hash,一般翻譯做“散列”,也有直接音譯為”哈希”的,就是把任意長度的輸入(又叫做預(yù)映射,pre-image),通過散列算法,變換成固定長度的輸出,該輸出就是散列值。這種轉(zhuǎn)換是一種壓縮映射,也就是,散列值的空間通常遠小于輸入的空間,不同的輸入可能會散列成相同的輸出,而不可能從散列值來唯一的確定輸入值。
摘要算法又稱為哈希算法,它是通過一個函數(shù),把任意長度的數(shù)據(jù)轉(zhuǎn)換為一個長度固定的數(shù)據(jù)串,這個數(shù)據(jù)串使用的十六進制表示。摘要算法是一個單向函數(shù),計算容易,如果想要反推摘要算法那是非常喜困難的,而且如果對原數(shù)據(jù)做了一個bit的修改,都會導(dǎo)致計算出的摘要完全不同,我們經(jīng)常使用摘要對比數(shù)據(jù)是否被修改過和密碼的加密;
簡單的說就是一種將任意長度的消息壓縮到某一固定長度的消息摘要的函數(shù)。
HASH主要用于信息安全領(lǐng)域中加密算法,他把一些不同長度的信息轉(zhuǎn)化成雜亂的128位的編碼里,叫做HASH值.也可以說,hash就是找到一種數(shù)據(jù)內(nèi)容和數(shù)據(jù)存放地址之間的映射關(guān)系
二,MD5
2.1什么是MD5算法
MD5訊息摘要演算法(英語:MD5Message-DigestAlgorithm),一種被廣泛使用的密碼雜湊函數(shù),可以產(chǎn)生出一個128位的散列值(hashvalue),用于確保信息傳輸完整一致。MD5的前身有MD2、MD3和MD4。
2.2MD5功能
輸入任意長度的信息,經(jīng)過處理,輸出為128位的信息(數(shù)字指紋);
不同的輸入得到的不同的結(jié)果(唯一性);
2.3MD5算法的特點
壓縮性:任意長度的數(shù)據(jù),算出的MD5值的長度都是固定的
容易計算:從原數(shù)據(jù)計算出MD5值很容易
抗修改性:對原數(shù)據(jù)進行任何改動,修改一個字節(jié)生成的MD5值區(qū)別也會很大
強抗碰撞:已知原數(shù)據(jù)和MD5,想找到一個具有相同MD5值的數(shù)據(jù)(即偽造數(shù)據(jù))是非常困難的。
2.4MD5算法是否可逆?
MD5不可逆的原因是其是一種散列函數(shù),使用的是hash算法,在計算過程中原文的部分信息是丟失了的。
2.5MD5用途
防止被篡改:
比如發(fā)送一個電子文檔,發(fā)送前,我先得到MD5的輸出結(jié)果a。然后在對方收到電子文檔后,對方也得到一個MD5的輸出結(jié)果b。如果a與b一樣就代表中途未被篡改。
比如我提供文件下載,為了防止不法分子在安裝程序中添加木馬,我可以在網(wǎng)站上公布由安裝文件得到的MD5輸出結(jié)果。
SVN在檢測文件是否在CheckOut后被修改過,也是用到了MD5.
防止直接看到明文:
現(xiàn)在很多網(wǎng)站在數(shù)據(jù)庫存儲用戶的密碼的時候都是存儲用戶密碼的MD5值。這樣就算不法分子得到數(shù)據(jù)庫的用戶密碼的MD5值,也無法知道用戶的密碼。(比如在UNIX系統(tǒng)中用戶的密碼就是以MD5(或其它類似的算法)經(jīng)加密后存儲在文件系統(tǒng)中。當用戶登錄的時候,系統(tǒng)把用戶輸入的密碼計算成MD5值,然后再去和保存在文件系統(tǒng)中的MD5值進行比較,進而確定輸入的密碼是否正確。通過這樣的步驟,系統(tǒng)在并不知道用戶密碼的明碼的情況下就可以確定用戶登錄系統(tǒng)的合法性。這不但可以避免用戶的密碼被具有系統(tǒng)管理員權(quán)限的用戶知道,而且還在一定程度上增加了密碼被破解的難度。)
防止抵賴(數(shù)字簽名):
這需要一個第三方認證機構(gòu)。例如A寫了一個文件,認證機構(gòu)對此文件用MD5算法產(chǎn)生摘要信息并做好記錄。若以后A說這文件不是他寫的,權(quán)威機構(gòu)只需對此文件重新產(chǎn)生摘要信息,然后跟記錄在冊的摘要信息進行比對,相同的話,就證明是A寫的了。這就是所謂的“數(shù)字簽名”。
三,SHA-1
安全哈希算法(SecureHashAlgorithm)主要適用于數(shù)字簽名標準(DigitalSignatureStandardDSS)里面定義的數(shù)字簽名算法(DigitalSignatureAlgorithmDSA)。對于長度小于2^64位的消息,SHA1會產(chǎn)生一個160位的消息摘要。當接收到消息的時候,這個消息摘要可以用來驗證數(shù)據(jù)的完整性。
SHA是美國國家安全局設(shè)計的,由美國國家標準和技術(shù)研究院發(fā)布的一系列密碼散列函數(shù)。
由于MD5和SHA-1于2005年被山東大學(xué)的教授王小云破解了,科學(xué)家們又推出了SHA224,SHA256,SHA384,SHA512,當然位數(shù)越長,破解難度越大,但同時生成加密的消息摘要所耗時間也更長。目前最流行的是加密算法是SHA-256.
四,MD5與SHA-1的比較
由于MD5與SHA-1均是從MD4發(fā)展而來,它們的結(jié)構(gòu)和強度等特性有很多相似之處,SHA-1與MD5的最大區(qū)別在于其摘要比MD5摘要長32比特。對于強行攻擊,產(chǎn)生任何一個報文使之摘要等于給定報文摘要的難度:MD5是2128數(shù)量級的操作,SHA-1是2160數(shù)量級的操作。產(chǎn)生具有相同摘要的兩個報文的難度:MD5是264是數(shù)量級的操作,SHA-1是280數(shù)量級的操作。因而,SHA-1對強行攻擊的強度更大。但由于SHA-1的循環(huán)步驟比MD5多80:64且要處理的緩存大160比特:128比特,SHA-1的運行速度比MD5慢。
五,使用MD5進行密碼機密
我們?nèi)粘I钪性诟鞔缶W(wǎng)站上注冊時填寫的密碼大部分都是使用MD5的方式儲存在數(shù)據(jù)庫中,還有一部分使用的是sha的方式,但是會有好多朋友在注冊時填寫的密碼過于簡單,簡單的密碼即便使用MD5方式加密了,黑客還可以事先計算出這些常用口令的MD5值,得到一個反推表,現(xiàn)在在網(wǎng)上隨便搜索一下就可以看到MD5在線解密,這種網(wǎng)站都是事先將這些常用的口令使用MD5計算一下放在一個庫中,我們將這種情況稱之為‘撞庫’;
由于常用口令很容易被黑客計算出來,這時又出現(xiàn)了一種方法來避免被反推出來,這個方法就是俗稱的“加鹽”,就是在你加密時在前面添加一個固定的字符串;
#!/usr/bin/python
#-*-encodeing:utf-8-*-
importhashlib
md5=hashlib.md5('鹽'.encode('utf-8'))
md5.update(b'123.com')
print(md5.hexdigest())
#cbff36039c3d0212b3e34c23dcde1456
#69c974abecb370564b051094c820fc6a
#此時得到的加密值與之前的比是不一樣的
還有一種更難破解的方式就是動態(tài)加鹽
#!/usr/bin/python
#-*-encodeing:utf-8-*-
importhashlib
usr='Fang'
md5=hashlib.md5(usr[0:2].encode('utf-8')+'鹽'.encode('utf-8'))
#這種方法就是取用戶名的前兩個字符再加上一個固定的字符,然后在加上密碼
md5.update(b'123.com')
print(md5.hexdigest())
以上內(nèi)容為大家介紹了python加密算法介紹,希望對大家有所幫助,如果想要了解更多Python相關(guān)知識,請關(guān)注IT培訓(xùn)機構(gòu):千鋒教育。