在线无码中文破解|日本影院一区二区三区|五月激情Av在线|国产香蕉视频一区|国产老熟女AAAA|云霸高清91视频|久久久www视频|在线熟女网站无码视频|国产精品 国产|韩日精品中文字幕

風(fēng)險(xiǎn)提示:理性看待區(qū)塊鏈,提高風(fēng)險(xiǎn)意識!

什么是哈希算法?

2個(gè)回答

玉面飛龍7星評價(jià)

2020-04-22 15:14:17

什么是哈希算法?

哈希算法的基本含義

哈希是密碼學(xué)的基礎(chǔ),理解哈希是理解數(shù)字簽名和加密通信等技術(shù)的必要前提。

哈希,英文是 hash ,本來意思是”切碎并攪拌,有一種食物就叫 Hash ,就是把食材切碎并攪拌一下做成的。哈希函數(shù)的運(yùn)算結(jié)果就是哈希值,通常簡稱為哈希。哈希函數(shù)有時(shí)候也翻譯做散列函數(shù)。

根據(jù)維基百科的定義,哈希函數(shù)要做的事情是給一個(gè)任意大小的數(shù)據(jù)生成出一個(gè)固定長度的數(shù)據(jù),作為它的映射。所謂映射就是一一對應(yīng)。一個(gè)可靠的哈希算法要滿足三點(diǎn)。

第一是安全,給定數(shù)據(jù) M 容易算出哈希值 X ,而給定 X 不能算出 M ,或者說哈希算法應(yīng)該是一個(gè)單向算法。第二是獨(dú)一無二,兩個(gè)不同的數(shù)據(jù),要擁有不相同的哈希。第三是長度固定,給定一種哈希算法,不管輸入是多大的數(shù)據(jù),輸出長度都是固定的。

但是仔細(xì)想一下,如果哈希的長度是固定的,也就是取值范圍是有限的,而輸入數(shù)據(jù)的取值范圍是無限的,所以總會(huì)找到兩個(gè)不同的輸入擁有相同的哈希。所以,哈希函數(shù)的安全性肯定是個(gè)相對概念。如果出現(xiàn)了兩個(gè)不同輸入有相同輸出的情況,就叫碰撞,collision 。不同的哈希算法,哈希位數(shù)越多,也就基本意味著安全級別越高,或者說它的”抗碰撞性就越好。

再來說說哈希函數(shù)的主要作用。哈希的獨(dú)一無二性,保證了如果數(shù)據(jù)在存儲或者傳輸過程中有絲毫損壞,那么它的哈希就會(huì)變。哈希函數(shù)的最常見的一個(gè)作用就是進(jìn)行完整性校驗(yàn)( Integrity Check ),完整的意思是數(shù)據(jù)無損壞。哈希有很多不同的稱呼,有時(shí)候叫 Digest 摘要,有時(shí)候叫 Checksum 校驗(yàn)值,有時(shí)候叫 Fingerprint 指紋,其實(shí)說的意思差不多,也就是說哈??梢杂脕泶頂?shù)據(jù)本身。

例如朋友給我傳遞一份數(shù)據(jù),傳完之后,我有一份,他手里也有一份,如果兩份數(shù)據(jù)的哈希值是一樣的,那么這兩份數(shù)據(jù)的內(nèi)容就是一樣的,或者說可以認(rèn)為傳遞過程中數(shù)據(jù)沒有損壞,我手里拿到的數(shù)據(jù)是完整的。

所以說,哈希函數(shù)的基本作用就是給大數(shù)據(jù)算出一個(gè)摘要性的長度固定的字符串,也就是所謂的哈希。哈希的作用主要是進(jìn)行完整性校驗(yàn)。

哈希算法的分類

下一步我們把哈希函數(shù)分類,更細(xì)致的聊聊哈希算法的特點(diǎn)。首先說哈希算法有很多種,例如 md5 ,SHA256 等等,但是它們總體上可以分為兩大類,一類是普通哈希,另外一類是加密哈希,cryptographic hash function 。

業(yè)界可以找到的哈希算法是有很多種的。我們可以大致按照輸出的哈希的長度來聊,雖然哈希算法的安全性也不單單是跟哈希長度有關(guān),但是一般哈希值越長也就是越安全。

例如 CRC-32 的輸出是32 bit,也就是32位的二進(jìn)制數(shù),表示成十六進(jìn)制就是8位。MD5 算法的哈希是32位16進(jìn)制數(shù),比較常見。SHA-256是256個(gè) Bit ,十六進(jìn)制表示就是64位。這些算法可以分成普通哈希和加密哈希算法,兩種算法之間沒有特別明顯的區(qū)別。例如本來 MD5 就是設(shè)計(jì)出來做加密哈希的,但是后來由于計(jì)算機(jī)的發(fā)展 MD5 出現(xiàn)碰撞的可能性就很大了,所以目前 MD5 只能當(dāng)普通哈希用,用來做數(shù)據(jù)校驗(yàn)。

加密哈希跟普通哈希的區(qū)別就是安全性,一般原則是只要一種哈希算法出現(xiàn)過碰撞,就會(huì)不被推薦成為加密哈希了,只有安全度高的哈希算法才能用作加密哈希。

同時(shí)加密哈希其實(shí)也能當(dāng)普通哈希來用,Git 版本控制工具就是用 SHA-1 這個(gè)加密哈希算法來做完整性校驗(yàn)的。一般來講越安全的哈希算法,處理速度也就越慢,所以并不是所有的場合都適合用加密哈希來替代普通哈希。

在密碼學(xué)領(lǐng)域,有兩個(gè)算法都是把數(shù)據(jù)做輸入,而輸出是一段誰也看不懂的數(shù)據(jù)。其中一個(gè)就是哈希算法,另外一個(gè)是加密算法。注意,哈希算法和加密算法是完全不同的。

首先哈希算法的輸出長度是固定的,而加密算法的輸出長度是跟數(shù)據(jù)本身長度直接相關(guān)的,第二,哈希是不可以逆向運(yùn)算出數(shù)據(jù)的,而加密算法的輸出是要能夠逆向運(yùn)算出數(shù)據(jù)的。關(guān)于加密算法,我們這里就不展開聊了。

這里主要是強(qiáng)調(diào)加密哈希算法只是被用在加密過程中,但是它本身不是加密算法。

總之,哈希算法有很多種,長度越長的算法基本認(rèn)為越安全。安全度低的哈希算法被認(rèn)為是普通哈希算法,主要用來做完整性校驗(yàn)。安全度高的被稱為加密哈希算法,會(huì)被用在加密算法中。所謂的高低都是相對概念,例如 MD5 曾經(jīng)屬于加密哈希,但是目前只能用來做安全校驗(yàn)了。而從2017年開始,SHA-1 算法生成的加密證書也會(huì)被各大瀏覽器拒絕了。目前最流行的加密算法是 SHA-2 ,但是跟 SHA-1 不同,SHA-2 不是一種算法,而是一系列算法的統(tǒng)稱,其中就包括咱們之前提過的 SHA-256 。

實(shí)用例子

說了這么多基礎(chǔ)知識,最后一部分咱們聊聊哈希在現(xiàn)實(shí)中的應(yīng)用。

首先一個(gè)場景是網(wǎng)站注冊。當(dāng)我們提交用戶名密碼的時(shí)候,用戶名被會(huì)直接保存到網(wǎng)站的數(shù)據(jù)庫中,但是密碼卻不是直接保存的,而是先把密碼轉(zhuǎn)換成哈希,保存到數(shù)據(jù)庫中的其實(shí)是哈希。所以,即使是公司后臺管理人員,也拿不到用戶的密碼。這樣,如果萬一公司數(shù)據(jù)庫泄露了,用戶的密碼依然是安全的。而當(dāng)用戶自己登錄網(wǎng)站的時(shí)候,輸入密碼提交到服務(wù)器,服務(wù)器上進(jìn)行相同的哈希運(yùn)算,因?yàn)檩斎霐?shù)據(jù)沒變,所以哈希也不會(huì)變,登錄也就成功了。

另外一個(gè)場景是區(qū)塊鏈和加密貨幣中。比特幣地址生成的時(shí)候,就用到了 SHA-256 算法,POW 也就是工作量證明,用的也是這個(gè)算法。

基本上凡是涉及到密碼學(xué)的地方,都會(huì)或多或少的用到哈希函數(shù)。

總結(jié)

關(guān)于哈希和哈希函數(shù),我們就聊到這里,下面來總結(jié)幾句。

哈希的基本作用就是提供一個(gè)數(shù)據(jù)的摘要或者指紋,通常的使用場景就是完整性校驗(yàn)。哈希算法有很多種,一般來講哈希越長的算法,安全性也就越高,安全度足夠高的哈希,或者說沒有任何人能夠成功實(shí)現(xiàn)碰撞的哈希,才有資格被考慮用在加密場合,而這類的哈希算法也被叫做加密哈希算法。

實(shí)際中常見的哈希算法有 MD5 ,SHA-1 ,和 SHA-256 等等,其中 MD5 通常用來進(jìn)行數(shù)據(jù)校驗(yàn),SHA-1 曾經(jīng)是加密哈希算法,但是目前已經(jīng)被除名,也只能做為一種安全度更高的校驗(yàn)算法了。SHA-256 依然是廣泛使用的加密哈希算法,在比特幣生成地址以及 POW 工作量證明算法中都會(huì)用到。


我sjr10星評價(jià)

2020-04-22 15:15:17

關(guān)于“算法”一詞,目前國內(nèi)用戶使用的比較模糊,有時(shí)指共識機(jī)制,比如POW算法,POS算法;有時(shí)指具體的Hash算法,比如SHA256,SCRYPT。應(yīng)該說這是由于早期從外文資料翻譯過來概念模糊導(dǎo)致的錯(cuò)誤,后來人云亦云。作為區(qū)塊鏈算法,哈希算法一直讓普通大眾感到晦澀難懂,那么究竟它是什么,有什么用途呢?

1.到底什么是哈希?

哈希的意思就是引入隨機(jī)數(shù)量的輸入數(shù)據(jù),將其加密,然后得出一個(gè)固定輸出數(shù)據(jù),就叫做哈希。輸入可以是任何數(shù)據(jù),只要能代表單個(gè)字節(jié),一個(gè)MP3文件,整本小說,你的銀行賬單,甚至是整個(gè)互聯(lián)網(wǎng)。關(guān)鍵在于輸入可以無限大。哈希算法可以根據(jù)你的需求來進(jìn)行選擇,現(xiàn)在公開的也有很多種算法。

2.哈希算法的作用是什么?

舉個(gè)例子,小哈和小希在籃球場。

小哈:小希,你是不是口渴了,你要不要去買水喝,順便幫我買一瓶。

小希:分明是你自己口渴了,懶得去,我不去。

小哈:那來拋硬幣,好不好,正面你去,反面我去,公平吧?

小希:好吧。

也就是說,利用哈希算法的放篡改性,用來驗(yàn)證信息的完整性,因?yàn)槿绻畔⒃趥鬟f過程中被篡改,那么運(yùn)行哈希計(jì)算得到的哈希值與原來的哈希值不一樣。在區(qū)塊鏈中,哈希函數(shù)的抗碰撞性用來做區(qū)塊和交易的完整性驗(yàn)證,一有篡改就能被識別出來。

簡單來說,哈希使得區(qū)塊鏈上的人對現(xiàn)在的整體狀態(tài)達(dá)成共識,電子簽名卻保證了所有交易都只由正確的人發(fā)出。我們依賴于這兩個(gè)特性,來保證區(qū)塊鏈不會(huì)存在任何欺詐和貪污現(xiàn)象。