第二十五篇 hashlib模块(* *)
用于加密相關(guān)的操作,Python 3.x里代替了md5模塊和sha模塊,主要提供?SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法。
加密復(fù)雜程度:?SHA1? ?<? ?SHA224? ? <? ?SHA256? ? <? SHA384? ?<? ?SHA512 <? MD5?
加密越復(fù)雜,意味著消息的時(shí)間就越多。
哈希算法:把一個(gè)不定長(zhǎng)的內(nèi)容,加密變成一個(gè)定長(zhǎng)的內(nèi)容,而且與被加密內(nèi)容是唯一對(duì)應(yīng)的。
很常見的,我們?cè)诰W(wǎng)銀,淘寶,京東能都有賬戶密碼,用戶輸入的時(shí)候都是明文,密碼在傳輸?shù)倪^程中,必須是密文,而不能是明文,同時(shí)數(shù)據(jù)庫(kù)存的時(shí)候,必須存為可與明文唯一對(duì)應(yīng)的加密后的值。
三個(gè)知識(shí)點(diǎn):
1.?一個(gè)字符串可以轉(zhuǎn)換成一段密文,并且不能被反解;
2.?既然不能反解,那只能正解,比如在登錄的時(shí)候就讓他們都變成密文,然后用兩個(gè)密文進(jìn)行比較
3.?原生寫的MD5,全世界人都知道,所以可以進(jìn)行加言,該加言只有開發(fā)者自己知道。對(duì)于需要加密的都是基于這個(gè)加言后的MD5進(jìn)行的,別人也就無法反解了。
import hashlibobj = hashlib.md5()obj.update("hello".encode("utf-8")) print(obj.hexdigest()) # 5d41402abc4b2a76b9719d911017c592以上加密算法雖然依然非常厲害,但時(shí)候存在缺陷,即:通過撞庫(kù)可以反解。所以,有必要對(duì)加密算法中添加自定義key再來做加密。
import hashlibobj = hashlib.md5("jiayan".encode("utf"))obj.update("hello".encode("utf-8")) print(obj.hexdigest()) # 686a12bb5577133d6698131cbf0b4b4a需要注意的:
先對(duì)"A"進(jìn)行加密,接著在對(duì)"B"進(jìn)行加密,"B"的加密是基于"A"的加密的。相當(dāng)于"B"的加密對(duì)象是"AB"
import hashlibobj = hashlib.md5("jiayan".encode("utf"))obj.update("hello".encode("utf-8")) print(obj.hexdigest()) # 686a12bb5577133d6698131cbf0b4b4a obj.update('world'.encode('utf8')) print(obj.hexdigest()) # c805eca8aad002e5d44a39d3aec78f8e#上面對(duì)于"world"的加密,是基于Hello加密后,對(duì)"world"再進(jìn)行加密的。 驗(yàn)證: import hashlibobj = hashlib.md5("jiayan".encode("utf"))obj.update('world'.encode('utf8')) print(obj.hexdigest()) # b278e99dfd536f7844785bbd39288e1a (沒有"hello"時(shí)) # c805eca8aad002e5d44a39d3aec78f8e (有"hello"時(shí)) 與沒有注釋"hello"的結(jié)果不一致,證明是基于hello加密后再進(jìn)行加密的。還可以通過下面的方法驗(yàn)證 import hashlibobj = hashlib.md5("jiayan".encode("utf"))obj.update('helloworld'.encode('utf8')) print(obj.hexdigest()) # c805eca8aad002e5d44a39d3aec78f8e ("helloworld"連在一起時(shí)) # c805eca8aad002e5d44a39d3aec78f8e (有"hello"時(shí))hashlib下還有SHA256等:
SHA256等其他加密算法的用法與MD5完全一樣,只需要把MD5換成256等即可。
import hashlibobj = hashlib.sha256("jiayan".encode("utf-8")) obj.update("hello".encode("utf-8")) print(obj.hexdigest()) # 24ac0688c0d320346adc8cafd1ba543cf4332ed1e5fdd610edd5f7365b4a862f?
轉(zhuǎn)載于:https://www.cnblogs.com/victorm/p/9281498.html
總結(jié)
以上是生活随笔為你收集整理的第二十五篇 hashlib模块(* *)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Visual Studio解决freop
- 下一篇: rm