关于hash(一):基本概念
1、什么Hash
在計(jì)算機(jī)科學(xué)中,hash是一種函數(shù),該函數(shù)可以把任意長度的輸入轉(zhuǎn)換為固定長度的輸出,輸出的結(jié)果稱為hash值,通常為一個(gè)字符串,對(duì)于特定的hash算法輸出結(jié)果的長度總是一定的,例如,不管是輸入內(nèi)容是長如小說般的內(nèi)容還是一個(gè)字母,MD5總會(huì)產(chǎn)生32為長度的hash值。
hash函數(shù)的特點(diǎn):
對(duì)于特定的hash算法輸出結(jié)果的長度總是一定的;
對(duì)于相同的輸入內(nèi)容不管執(zhí)行多少次hash函數(shù),總會(huì)得到相同的hash值;
對(duì)于輸入字符串哪怕及其微小的變動(dòng)也會(huì)引起輸出結(jié)果巨大的變化;
哈希過程是單向的,即不能通過特定的函數(shù)從hash值恢復(fù)出原始數(shù)據(jù)。
2、常見的hash算法
有很多廣泛使用的hash算法,例如MD5、SHA1、SHA224、SHA256、SHA512等,一般編程語言中都提供的了常見的hash算法,如在python中:
import hashlib hash = hashlib.md5(“Dataspace”.encode(‘utf-8’)) print(hash.hexdigest())將會(huì)輸出:
e2d48e7bc4413d04a4dcb1fe32c877f63、常見hash算法的應(yīng)用場景
3.1 hash與密碼
如果一個(gè)系統(tǒng)在數(shù)據(jù)庫中直接保存了用戶名和密碼明文,那么一旦用戶信息表泄露,捕獲到信息的人就能使用任意賬號(hào)登錄系統(tǒng);此時(shí)如果用戶信息表中密碼字段保存的是用戶密碼的hash值,即使該密碼泄露,拿到該密碼的人也并不能使用它來登錄系統(tǒng),因此給密碼進(jìn)行hash處理,會(huì)在一定程度上增加用戶的安全性,注意,這種安全性并不是絕對(duì)的,因?yàn)閔ash過程雖然是不可逆的,但卻可以被破解,因?yàn)檫@個(gè)世界上早有人搜集了不計(jì)其數(shù)的明文以及對(duì)應(yīng)的hash值,放在數(shù)據(jù)庫中,并以網(wǎng)站的形式對(duì)外提供服務(wù),如https://cmd5.com/。
對(duì)密碼更為安全的處理形式將會(huì)另行展開論述。
3.2 對(duì)抗計(jì)算機(jī)病毒
當(dāng)發(fā)布出去的計(jì)算機(jī)程序感染病毒時(shí),執(zhí)行該程序可能會(huì)引起一些嚴(yán)重的后果, 那么如何保證用戶執(zhí)行的程序是開發(fā)者“真正”發(fā)布的程序呢?使用hash算法就是起到防范病毒的作用。具體來說就是,當(dāng)發(fā)布程序時(shí),會(huì)以程序?yàn)檩斎胧褂胔ash算法得到一個(gè)hash值,然后將程序和該hash值一并分發(fā)給用戶,用戶以得到的程序作為輸入,執(zhí)行指定的hash算法,也會(huì)得到一個(gè)hash值,如果用戶執(zhí)行出來的hash值與程序發(fā)布者發(fā)布的hash值一致說明程序未被篡改。
總結(jié)
以上是生活随笔為你收集整理的关于hash(一):基本概念的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Apache Shiro 权限管理
- 下一篇: SylixOS下影子终端工具