今天談談什麼是Hash 雜湊函數~
想補充關於hash的CTF題目。
負責規劃完善一個活動
?
可以沒有能力,但是不能沒有責任感~JAYHOM
我們利用公鑰、私鑰來確認資料的完整性,假設A傳送訊息給B時,先將明文透過雜湊函數得到雜湊值再利用自己的私鑰加密,將自己的明文以及加密完的值傳給B方,B方為了確認資料是否有被竄改過,先將加密完的值利用A方的公鑰解密可以得到明文的雜湊值。自己也有得到明文,將此明文放入雜湊函數得到雜湊值,查看兩值(明文進入雜湊函數的雜湊值以及利用公鑰解密的雜湊值)是否相同,如果相同表示資料安全,如果不同表示明文資料可能遭到竄改。
如果兩個值都相同就可以確定訊息安全,即使我們在傳輸的過程中被中間人所攔截,中間人雖然利用A方的公鑰訊息,但是無法將要竄改的訊息偽裝成A所發送的訊息,因為需要使用到A的私鑰才可以加密。
我們利用非對稱式加密演算法的公鑰和私鑰來確認雙方的身分,再利用對稱式加密演算法之密碼作為傳送資料加密的方式,結合了對稱式加密與非對稱式加密演算法的優點。
md5sum
,sha256sum
$ printf "Hello, world!" | md5sum
6cd3556deb0da54bca060b4c39479839 -
$ printf "Hello, world!" | sha256sum
315f5bdb76d078c43b8ac0064e4a0164612b1fce77c869345bfc94c75894edd3 -
hashlib
In [1]: import hashlib
In [2]: hashlib.md5('Hello, world!').hexdigest()
Out[2]: '6cd3556deb0da54bca060b4c39479839'
In [3]: hashlib.sha256('Hello, world!').hexdigest()
Out[3]: '315f5bdb76d078c43b8ac0064e4a0164612b1fce77c869345bfc94c75894edd3'
hashlib.md5(b'id0-rsa.pub').hexdigest()