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