加密和杂凑(Hashing)有什么不一样?
原文標(biāo)題:What is the difference between encryption and hashing?
原文作者: M157q
譯文出自:云子可信官方論壇
本文永久鏈接:https://bbs.cloudtrust.com.cn/thread-352-1-1.html
譯者:云子可信漢化組
前言
你可能或多或少都有看過(guò)或聽過(guò)「MD5 加密」、「MD5 解密」、「SHA-1 加密」、「SHA-1 解密」、「雜湊加密演算法」。但MD5 和SHA-1 實(shí)際上并不是加密演算法,而是雜湊演算法。那么究竟加密跟雜湊到底有什么不一樣,又該如何區(qū)分,這篇會(huì)跟大家好好聊一聊
雜湊(Hash)
其實(shí)雜湊在一些壓縮演算法或者排序演算法也都有用到,但這邊只就資訊安全相關(guān)的部分進(jìn)行討論。
特性
雜湊演算法的輸出又被稱做「雜湊值」(hash value)。
無(wú)論原文的內(nèi)容長(zhǎng)短,雜湊值都會(huì)是固定的長(zhǎng)度,不同雜湊演算法的輸出長(zhǎng)度不同,即輸出長(zhǎng)度與雜湊演算法有關(guān),不受原文長(zhǎng)度影響。
相同的內(nèi)容作為相同雜湊演算法的輸入,得到的輸出必定一樣。不同的內(nèi)容作為相同雜湊演算法的輸入,得到的相同輸出的機(jī)率極低。因此,兩個(gè)原文的內(nèi)容即便只差一個(gè)字,雜湊演算法產(chǎn)生的兩個(gè)輸出內(nèi)容卻會(huì)差非常多。
無(wú)法將雜湊演算法的輸出解回原本的輸入,雜湊是單向的。
用途
檔案校驗(yàn)碼(Checksum)
用來(lái)快速判斷檔案是否和原本相同。
舉個(gè)栗子:論壇檔案下載
有在論壇下載過(guò)檔案的人應(yīng)該都很常見到一長(zhǎng)串 MD5 或 SHA-1 驗(yàn)證碼,就是用來(lái)讓你快速檢查你下載的檔案里頭的內(nèi)容,是不是跟上傳者上傳的檔案一樣。不一樣的話可能就是你載錯(cuò)檔案、檔案有毀損或檔案被人加料了。
不需要被還原的資料
舉個(gè)栗子:避免明文儲(chǔ)存使用者密碼
避免直接儲(chǔ)存使用者的明文密碼,除了避免資料庫(kù)外泄時(shí),攻擊者無(wú)需進(jìn)一步運(yùn)算就可以直接
常見演算法
- SHA 系列
- MD5
- BLAKE2
結(jié)論
就是一串拿來(lái)做檢查的字串,但根據(jù)使用需求可以有不同的用途。
所以,為什么雜湊不是加密?
雜湊和加密很容易被人搞混的原因,主要是因?yàn)?#xff0c;雜湊和加密通常是一起使用的,常常被拿在一起講,所以久而久之就搞混了。
但其實(shí)可以透過(guò)以下幾點(diǎn)來(lái)區(qū)分:
- 加密需要密鑰,且可以透過(guò)解密得到原文。(加密可逆)
- 雜湊不需密鑰,無(wú)法逆向解出原始輸入。(雜湊不可逆)
- 雖然可以透過(guò)額外儲(chǔ)存的rainbow table 來(lái)找尋原始輸入,但彩虹表是預(yù)先計(jì)算并儲(chǔ)存下來(lái)的, 而不是雜湊演算法本身的設(shè)計(jì)。
舉例
今天如果我拿到一串密文,我是有辦法透過(guò)解密,得到原始的明文的,而且如果使用非對(duì)稱式加密的話,我什至還可以驗(yàn)證傳送方是不是本人(是否有被進(jìn)行中間人攻擊)。
雜湊演算法在這里也會(huì)被使用,通常會(huì)被拿來(lái)檢驗(yàn)傳送的訊息是否有被更改過(guò)。
傳送方附上原始訊息經(jīng)過(guò)某個(gè)雜湊演算法得出的雜湊值,接收方在解開這個(gè)訊息之后,會(huì)透過(guò)相同的雜湊演算法來(lái)驗(yàn)證。
但如果是拿到一串雜湊值的話,理論上是無(wú)法逆向得到原始的明文的,根本無(wú)法拿來(lái)做資料的傳遞。
所以別再說(shuō)出「MD5 加密」、「MD5 解密」、「SHA-1 加密」、「SHA-1 解密」之類的話啦!
總結(jié)
以上是生活随笔為你收集整理的加密和杂凑(Hashing)有什么不一样?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python13
- 下一篇: java实现二维码的生成和解析包含工具类