Hash简介
1基本概況
Hash,一般翻譯做“散列”,也有直接音譯為“哈?!钡?#xff0c;就是把任意長(zhǎng)度的輸入(又叫做預(yù)映射, pre-p_w_picpath),通過(guò)散列算法,變換成固定長(zhǎng)度的輸出,該輸出就是散列值。這種轉(zhuǎn)換是一種壓縮映射,也就是,散列值的空間通常遠(yuǎn)小于輸入的空間,不同的輸入可能會(huì)散列成相同的輸出,而不可能從散列值來(lái)唯一的確定輸入值。簡(jiǎn)單的說(shuō)就是一種將任意長(zhǎng)度的消息壓縮到某一固定長(zhǎng)度的消息摘要的函數(shù)。HASH函數(shù)(計(jì)算機(jī)算法領(lǐng)域)基本概念
* 若結(jié)構(gòu)中存在和關(guān)鍵字K相等的記錄,則必定在f(K)的存儲(chǔ)位置上。由此,不需比較便可直接取得所查記錄。稱(chēng)這個(gè)對(duì)應(yīng)關(guān)系f為散列函數(shù)(Hash function),按這個(gè)思想建立的表為散列表。* 對(duì)不同的關(guān)鍵字可能得到同一散列地址,即key1≠key2,而f(key1)=f(key2),這種現(xiàn)象稱(chēng)碰撞。具有相同函數(shù)值的關(guān)鍵字對(duì)該散列函數(shù)來(lái)說(shuō)稱(chēng)做同義詞。綜上所述,根據(jù)散列函數(shù)H(key)和處理沖突的方法將一組關(guān)鍵字映象到一個(gè)有限的連續(xù)的地址集(區(qū)間)上,并以關(guān)鍵字在地址集中的“象” 作為記錄在表中的存儲(chǔ)位置,這種表便稱(chēng)為散列表,這一映象過(guò)程稱(chēng)為散列造表或散列,所得的存儲(chǔ)位置稱(chēng)散列地址。* 若對(duì)于關(guān)鍵字集合中的任一個(gè)關(guān)鍵字,經(jīng)散列函數(shù)映象到地址集合中任何一個(gè)地址的概率是相等的,則稱(chēng)此類(lèi)散列函數(shù)為均勻散列函數(shù)(Uniform Hash function),這就是使關(guān)鍵字經(jīng)過(guò)散列函數(shù)得到一個(gè)“隨機(jī)的地址”,從而減少?zèng)_突。散列函數(shù)的性質(zhì)
所有散列函數(shù)都有如下一個(gè)基本特性:如果兩個(gè)散列值是不相同的(根據(jù)同一函數(shù)),那么這兩個(gè)散列值的原始輸入也是不相同的。這個(gè)特性是散列函數(shù)具有確定性的結(jié)果。但另一方面,散列函數(shù)的輸入和輸出不是一一對(duì)應(yīng)的,如果兩個(gè)散列值相同,兩個(gè)輸入值很可能是相同的,但并不能絕對(duì)肯定二者一定相等。輸入一些數(shù)據(jù)計(jì)算出散列值,然后部分改變輸入值,一個(gè)具有強(qiáng)混淆特性的散列函數(shù)會(huì)產(chǎn)生一個(gè)完全不同的散列值。典型的散列函數(shù)都有無(wú)限定義域,比如任意長(zhǎng)度的字節(jié)字符串,和有限的值域,比如固定長(zhǎng)度的比特串。在某些情況下,散列函數(shù)可以設(shè)計(jì)成具有相同大小的定義域和值域間的一一對(duì)應(yīng)。一一對(duì)應(yīng)的散列函數(shù)也稱(chēng)為排列??赡嫘钥梢酝ㄟ^(guò)使用一系列的對(duì)于輸入值的可逆“混合”運(yùn)算而得到。常用HASH函數(shù)
·直接取余法:f(x):= x mod maxM ; maxM一般是不太接近 2^t 的一個(gè)質(zhì)數(shù)?!こ朔ㄈ≌?#xff1a;f(x):=trunc((x/maxX)*maxlongit) mod maxM,主要用于實(shí)數(shù)?!て椒饺≈蟹?#xff1a;f(x):=(x*x div 1000 ) mod 1000000); 平方后取中間的,每位包含信息比較多。構(gòu)造方法
散列函數(shù)能使對(duì)一個(gè)數(shù)據(jù)序列的訪問(wèn)過(guò)程更加迅速有效,通過(guò)散列函數(shù),數(shù)據(jù)元素將被更快地定位。(詳細(xì)構(gòu)造方法可以參考hash函數(shù)中的【哈希表的構(gòu)造方法】)1.直接尋址法:取關(guān)鍵字或關(guān)鍵字的某個(gè)線性函數(shù)值為散列地址。即H(key)=key或H(key) = a·key + b,其中a和b為常數(shù)(這種散列函數(shù)叫做自身函數(shù))2. 數(shù)字分析法3. 平方取中法4. 折疊法5. 隨機(jī)數(shù)法6. 除留余數(shù)法:取關(guān)鍵字被某個(gè)不大于散列表表長(zhǎng)m的數(shù)p除后所得的余數(shù)為散列地址。即 H(key) = key MOD p,p<=m。不僅可以對(duì)關(guān)鍵字直接取模,也可在折疊、平方取中等運(yùn)算之后取模。對(duì)p的選擇很重要,一般取素?cái)?shù)或m,若p選的不好,容易產(chǎn)生同義詞。處理沖突的方法
1.開(kāi)放尋址法;Hi=(H(key) + di) MOD m,i=1,2,…,k(k<=m-1),其中H(key)為散列函數(shù),m為散列表長(zhǎng),di為增量序列,可有下列三種取法:1). di=1,2,3,…,m-1,稱(chēng)線性探測(cè)再散列;2). di=1^2,(-1)^2,2^2,(-2)^2,(3)^2,…,±(k)^2,(k<=m/2)稱(chēng)二次探測(cè)再散列;3). di=偽隨機(jī)數(shù)序列,稱(chēng)偽隨機(jī)探測(cè)再散列。2. 再散列法:Hi=RHi(key),i=1,2,…,k RHi均是不同的散列函數(shù),即在同義詞產(chǎn)生地址沖突時(shí)計(jì)算另一個(gè)散列函數(shù)地址,直到?jīng)_突不再發(fā)生,這種方法不易產(chǎn)生“聚集”,但增加了計(jì)算時(shí)間。3. 鏈地址法(拉鏈法)4. 建立一個(gè)公共溢出區(qū)查找的性能分析
散列表的查找過(guò)程基本上和造表過(guò)程相同。一些關(guān)鍵碼可通過(guò)散列函數(shù)轉(zhuǎn)換的地址直接找到,另一些關(guān)鍵碼在散列函數(shù)得到的地址上產(chǎn)生了沖突,需要按處理沖突的方法進(jìn)行查找。在介紹的三種處理沖突的方法中,產(chǎn)生沖突后的查找仍然是給定值與關(guān)鍵碼進(jìn)行比較的過(guò)程。所以,對(duì)散列表查找效率的量度,依然用平均查找長(zhǎng)度來(lái)衡量。查找過(guò)程中,關(guān)鍵碼的比較次數(shù),取決于產(chǎn)生沖突的多少,產(chǎn)生的沖突少,查找效率就高,產(chǎn)生的沖突多,查找效率就低。因此,影響產(chǎn)生沖突多少的因素,也就是影響查找效率的因素。影響產(chǎn)生沖突多少有以下三個(gè)因素:1.散列函數(shù)是否均勻;2. 處理沖突的方法;3.散列表的裝填因子。散列表的裝填因子定義為:α= 填入表中的元素個(gè)數(shù)/散列表的長(zhǎng)度α是散列表裝滿(mǎn)程度的標(biāo)志因子。由于表長(zhǎng)是定值,α與“填入表中的元素個(gè)數(shù)”成正比,所以,α越大,填入表中的元素較多,產(chǎn)生沖突的可能性就越大;α越小,填入表中的元素較少,產(chǎn)生沖突的可能性就越小。實(shí)際上,散列表的平均查找長(zhǎng)度是裝填因子α的函數(shù),只是不同處理沖突的方法有不同的函數(shù)。了解了hash基本定義,就不能不提到一些著名的hash算法,MD5和SHA-1可以說(shuō)是目前應(yīng)用最廣泛的Hash算法,而它們都是以MD4為基礎(chǔ)設(shè)計(jì)的。常用hash算法的介紹:(1)MD4MD4(RFC 1320)是 MIT 的Ronald L. Rivest在 1990 年設(shè)計(jì)的,MD 是 Message Digest(消息摘要) 的縮寫(xiě)。它適用在32位字長(zhǎng)的處理器上用高速軟件實(shí)現(xiàn)——它是基于 32位操作數(shù)的位操作來(lái)實(shí)現(xiàn)的。(2)MD5MD5(RFC 1321)是 Rivest 于1991年對(duì)MD4的改進(jìn)版本。它對(duì)輸入仍以512位分組,其輸出是4個(gè)32位字的級(jí)聯(lián),與 MD4 相同。MD5比MD4來(lái)得復(fù)雜,并且速度較之要慢一點(diǎn),但更安全,在抗分析和抗差分方面表現(xiàn)更好。(3)SHA-1及其他SHA1是由NIST NSA設(shè)計(jì)為同DSA一起使用的,它對(duì)長(zhǎng)度小于264的輸入,產(chǎn)生長(zhǎng)度為160bit的散列值,因此抗窮舉(brute-force)性更好。SHA-1 設(shè)計(jì)時(shí)基于和MD4相同原理,并且模仿了該算法。散列函數(shù)的應(yīng)用
由于散列函數(shù)的應(yīng)用的多樣性,它們經(jīng)常是專(zhuān)為某一應(yīng)用而設(shè)計(jì)的。例如,加密散列函數(shù)假設(shè)存在一個(gè)要找到具有相同散列值的原始輸入的敵人。一個(gè)設(shè)計(jì)優(yōu)秀的加密散列函數(shù)是一個(gè)“單向”操作:對(duì)于給定的散列值,沒(méi)有實(shí)用的方法可以計(jì)算出一個(gè)原始輸入,也就是說(shuō)很難偽造。為加密散列為目的設(shè)計(jì)的函數(shù),如MD5,被廣泛的用作檢驗(yàn)散列函數(shù)。這樣軟件下載的時(shí)候,就會(huì)對(duì)照驗(yàn)證代碼之后才下載正確的文件部分。此代碼有可能因?yàn)榄h(huán)境因素的變化,如機(jī)器配置或者IP地址的改變而有變動(dòng)。以保證源文件的安全性。錯(cuò)誤監(jiān)測(cè)和修復(fù)函數(shù)主要用于辨別數(shù)據(jù)被隨機(jī)的過(guò)程所擾亂的事例。當(dāng)散列函數(shù)被用于校驗(yàn)和的時(shí)候,可以用相對(duì)較短的散列值來(lái)驗(yàn)證任意長(zhǎng)度的數(shù)據(jù)是否被更改過(guò)。錯(cuò)誤校正使用一個(gè)散列函數(shù)可以很直觀的檢測(cè)出數(shù)據(jù)在傳輸時(shí)發(fā)生的錯(cuò)誤。在數(shù)據(jù)的發(fā)送方,對(duì)將要發(fā)送的數(shù)據(jù)應(yīng)用散列函數(shù),并將計(jì)算的結(jié)果同原始數(shù)據(jù)一同發(fā)送。在數(shù)據(jù)的接收方,同樣的散列函數(shù)被再一次應(yīng)用到接收到的數(shù)據(jù)上,如果兩次散列函數(shù)計(jì)算出來(lái)的結(jié)果不一致,那么就說(shuō)明數(shù)據(jù)在傳輸?shù)倪^(guò)程中某些地方有錯(cuò)誤了。這就叫做冗余校驗(yàn)。對(duì)于錯(cuò)誤校正,假設(shè)相似擾動(dòng)的分布接近最小(a distribution of likely perturbations is assumed at least approximately)。對(duì)于一個(gè)信息串的微擾可以被分為兩類(lèi),大的(不可能的)錯(cuò)誤和小的(可能的)錯(cuò)誤。我們對(duì)于第二類(lèi)錯(cuò)誤重新定義如下,假如給定 H(x) 和 x+s,那么只要s足夠小,我們就能有效的計(jì)算出x。那樣的散列函數(shù)被稱(chēng)作錯(cuò)誤校正編碼。這些錯(cuò)誤校正編碼有兩個(gè)重要的分類(lèi):循環(huán)冗余校驗(yàn)和里德所羅門(mén)碼。語(yǔ)音識(shí)別對(duì)于像從一個(gè)已知列表中匹配一個(gè)MP3文件這樣的應(yīng)用,一種可能的方案是使用傳統(tǒng)的散列函數(shù)——例如MD5,但是這種方案會(huì)對(duì)時(shí)間平移、CD讀取錯(cuò)誤、不同的音頻壓縮算法或者音量調(diào)整的實(shí)現(xiàn)機(jī)制等情況非常敏感。使用一些類(lèi)似于MD5的方法有利于迅速找到那些嚴(yán)格相同(從音頻文件的二進(jìn)制數(shù)據(jù)來(lái)看)的音頻文件,但是要找到全部相同(從音頻文件的內(nèi)容來(lái)看)的音頻文件就需要使用其他更高級(jí)的算法了。那些并不緊隨IT工業(yè)潮流的人往往能反其道而行之,對(duì)于那些微小差異足夠魯棒的散列函數(shù)確實(shí)存在。現(xiàn)存的絕大多數(shù)散列算法都是不夠魯棒的,但是有少數(shù)散列算法能夠達(dá)到辨別從嘈雜房間里的揚(yáng)聲器里播放出來(lái)的音樂(lè)的魯棒性。有一個(gè)實(shí)際的例子是Shazam[1]服務(wù)。用戶(hù)可以用電話(huà)機(jī)撥打一個(gè)特定的號(hào)碼,并將電話(huà)機(jī)的話(huà)筒靠近用于播放音樂(lè)的揚(yáng)聲器。該項(xiàng)服務(wù)會(huì)分析正在播放的音樂(lè),并將它于存儲(chǔ)在數(shù)據(jù)庫(kù)中的已知的散列值進(jìn)行比較。用戶(hù)就能夠收到被識(shí)別的音樂(lè)的曲名(需要收取一定的費(fèi)用)信息安全Hash算法在信息安全方面的應(yīng)用主要體現(xiàn)在以下的3個(gè)方面:(1)文件校驗(yàn)我們比較熟悉的校驗(yàn)算法有奇偶校驗(yàn)和CRC校驗(yàn),這2種校驗(yàn)并沒(méi)有抗數(shù)據(jù)篡改的能力,它們一定程度上能檢測(cè)并糾正數(shù)據(jù)傳輸中的信道誤碼,但卻不能防止對(duì)數(shù)據(jù)的惡意破壞。MD5 Hash算法的"數(shù)字指紋"特性,使它成為目前應(yīng)用最廣泛的一種文件完整性校驗(yàn)和(Checksum)算法,不少Unix系統(tǒng)有提供計(jì)算md5 checksum的命令。(2)數(shù)字簽名Hash 算法也是現(xiàn)代密碼體系中的一個(gè)重要組成部分。由于非對(duì)稱(chēng)算法的運(yùn)算速度較慢,所以在數(shù)字簽名協(xié)議中,單向散列函數(shù)扮演了一個(gè)重要的角色。對(duì) Hash 值,又稱(chēng)"數(shù)字摘要"進(jìn)行數(shù)字簽名,在統(tǒng)計(jì)上可以認(rèn)為與對(duì)文件本身進(jìn)行數(shù)字簽名是等效的。而且這樣的協(xié)議還有其他的優(yōu)點(diǎn)。(3) 鑒權(quán)協(xié)議如下的鑒權(quán)協(xié)議又被稱(chēng)作挑戰(zhàn)--認(rèn)證模式:在傳輸信道是可被偵聽(tīng),但不可被篡改的情況下,這是一種簡(jiǎn)單而安全的方法。以上就是一些關(guān)于hash以及其相關(guān)的一些基本預(yù)備知識(shí)。文件的hash值
大家都知道emule是基于P2P (Peer-to-peer的縮寫(xiě),指的是點(diǎn)對(duì)點(diǎn)的意思的軟件), 它采用了"多源文件傳輸協(xié)議”(MFTP,the Multisource FileTransfer Protocol)。在協(xié)議中,定義了一系列傳輸、壓縮和打包還有積分的標(biāo)準(zhǔn),emule 對(duì)于每個(gè)文件都有md5-hash的算法設(shè)置,這使得該文件獨(dú)一無(wú)二,并且在整個(gè)網(wǎng)絡(luò)上都可以追蹤得到。MD5-Hash-文件的數(shù)字文摘通過(guò)Hash函數(shù)計(jì)算得到。不管文件長(zhǎng)度如何,它的Hash函數(shù)計(jì)算結(jié)果是一個(gè)固定長(zhǎng)度的數(shù)字。與加密算法不同,這一個(gè)Hash算法是一個(gè)不可逆的單向函數(shù)。采用安全性高的Hash算法,如MD5、SHA時(shí),兩個(gè)不同的文件幾乎不可能得到相同的Hash結(jié)果。因此,一旦文件被修改,就可檢測(cè)出來(lái)。當(dāng)我們的文件放到emule里面進(jìn)行共享發(fā)布的時(shí)候,emule會(huì)根據(jù)hash算法自動(dòng)生成這個(gè)文件的hash值,他就是這個(gè)文件唯一的身份標(biāo)志,它包含了這個(gè)文件的基本信息,然后把它提交到所連接的服務(wù)器。當(dāng)有他人想對(duì)這個(gè)文件提出下載請(qǐng)求的時(shí)候, 這個(gè)hash值可以讓他人知道他正在下載的文件是不是就是他所想要的。尤其是在文件的其他屬性被更改之后(如名稱(chēng)等)這個(gè)值就更顯得重要。而且服務(wù)器還提供了,這個(gè)文件當(dāng)前所在的用戶(hù)的地址,端口等信息,這樣emule就知道到哪里去下載了。一般來(lái)講我們要搜索一個(gè)文件,emule在得到了這個(gè)信息后,會(huì)向被添加的服務(wù)器發(fā)出請(qǐng)求,要求得到有相同hash值的文件。而服務(wù)器則返回持有這個(gè)文件的用戶(hù)信息。這樣我們的客戶(hù)端就可以直接的和擁有那個(gè)文件的用戶(hù)溝通,看看是不是可以從他那里下載所需的文件。對(duì)于emule中文件的hash值是固定的,也是唯一的,它就相當(dāng)于這個(gè)文件的信息摘要,無(wú)論這個(gè)文件在誰(shuí)的機(jī)器上,他的hash值都是不變的,無(wú)論過(guò)了多長(zhǎng)時(shí)間,這個(gè)值始終如一,當(dāng)我們?cè)谶M(jìn)行文件的下載上傳過(guò)程中,emule都是通過(guò)這個(gè)值來(lái)確定文件。hash文件
我們經(jīng)常在emule日至里面看到,emule正在hash文件,這里就是利用了hash算法的文件校驗(yàn)性這個(gè)功能了,文章前面已經(jīng)說(shuō)了一些這些功能,其實(shí)這部分是一個(gè)非常復(fù)雜的過(guò)程,在ftp,bt等軟件里面都是用的這個(gè)基本原理,emule里面是采用文件分塊傳輸,這樣傳輸?shù)拿恳粔K都要進(jìn)行對(duì)比校驗(yàn),如果錯(cuò)誤則要進(jìn)行重新下載,這期間這些相關(guān)信息寫(xiě)入met文件,直到整個(gè)任務(wù)完成,這個(gè)時(shí)候part文件進(jìn)行重新命名,然后使用move命令,把它傳送到incoming文件里面,然后met文件自動(dòng)刪除,所以我們有的時(shí)候會(huì)遇到hash文件失敗,就是指的是met里面的信息出了錯(cuò)誤不能夠和part文件匹配,另外有的時(shí)候開(kāi)機(jī)也要瘋狂hash,有兩種情況一種是你在第一次使用,這個(gè)時(shí)候要hash提取所有文件信息,還有一種情況就是上一次你非法關(guān)機(jī),那么這個(gè)時(shí)候就是要進(jìn)行排錯(cuò)校驗(yàn)了。關(guān)于hash的算法研究,一直是信息科學(xué)里面的一個(gè)前沿,尤其在網(wǎng)絡(luò)技術(shù)普及的今天,他的重要性越來(lái)越突出,其實(shí)我們每天在網(wǎng)上進(jìn)行的信息交流安全驗(yàn)證,我們?cè)谑褂玫牟僮飨到y(tǒng)密鑰原理,里面都有它的身影,特別對(duì)于那些研究信息安全有興趣的朋友,這更是一個(gè)打開(kāi)信息世界的鑰匙,他在hack世界里面也是一個(gè)研究的焦點(diǎn)。userhash
道理同上,當(dāng)我們?cè)诘谝淮问褂胑mule的時(shí)候,emule會(huì)自動(dòng)生成一個(gè)值,這個(gè)值也是唯一的,它是我們?cè)趀mule世界里面的標(biāo)志,只要你不卸載,不刪除config,你的userhash值也就永遠(yuǎn)不變,積分制度就是通過(guò)這個(gè)值在起作用,emule里面的積分保存,身份識(shí)別,都是使用這個(gè)值,而和你的id和你的用戶(hù)名無(wú)關(guān),你隨便怎么改這些東西,你的userhash值都是不變的,這也充分保證了公平性。其實(shí)他也是一個(gè)信息摘要,只不過(guò)保存的不是文件信息,而是我們每個(gè)人的信息。2散列表
散列表是散列函數(shù)的一個(gè)主要應(yīng)用,使用散列表能夠快速的按照關(guān)鍵字查找數(shù)據(jù)記錄。(注意:關(guān)鍵字不是像在加密中所使用的那樣是秘密的,但它們都是用來(lái)“解鎖”或者訪問(wèn)數(shù)據(jù)的。)例如,在英語(yǔ)字典中的關(guān)鍵字是英文單詞,和它們相關(guān)的記錄包含這些單詞的定義。在這種情況下,散列函數(shù)必須把按照字母順序排列的字符串映射到為散列表的內(nèi)部數(shù)組所創(chuàng)建的索引上。散列表散列函數(shù)的幾乎不可能/不切實(shí)際的理想是把每個(gè)關(guān)鍵字映射到唯一的索引上(參考完美散列),因?yàn)檫@樣能夠保證直接訪問(wèn)表中的每一個(gè)數(shù)據(jù)。一個(gè)好的散列函數(shù)(包括大多數(shù)加密散列函數(shù))具有均勻的真正隨機(jī)輸出,因而平均只需要一兩次探測(cè)(依賴(lài)于裝填因子)就能找到目標(biāo)。同樣重要的是,隨機(jī)散列函數(shù)幾乎不可能出現(xiàn)非常高的沖突率。但是,少量的可以估計(jì)的沖突在實(shí)際狀況下是不可避免的(參考生日悖論)。在很多情況下,heuristic散列函數(shù)所產(chǎn)生的沖突比隨機(jī)散列函數(shù)少的多。Heuristic函數(shù)利用了相似關(guān)鍵字的相似性。例如,可以設(shè)計(jì)一個(gè)heuristic函數(shù)使得像FILE0000.CHK,FILE0001.CHK,FILE0002.CHK,等等這樣的文件名映射到表的連續(xù)指針上,也就是說(shuō)這樣的序列不會(huì)發(fā)生沖突。相比之下,對(duì)于一組好的關(guān)鍵字性能出色的隨機(jī)散列函數(shù),對(duì)于一組壞的關(guān)鍵字經(jīng)常性能很差,這種壞的關(guān)鍵字會(huì)自然產(chǎn)生而不僅僅在***中才出現(xiàn)。性能不佳的散列函數(shù)表意味著查找操作會(huì)退化為費(fèi)時(shí)的線性搜索。3擴(kuò)展
MD5、SHA1的破解2004年8月17日,在美國(guó)加州圣芭芭拉召開(kāi)的國(guó)際密碼大會(huì)上,山東大學(xué)王小云教授在國(guó)際會(huì)議上首次宣布了她及她的研究小組的研究成果——對(duì)MD5、HAVAL-128、MD4和RIPEMD四個(gè)著名密碼算法的破譯結(jié)果。次年二月宣布破解SHA-1密碼。4命令描述
Linux命令——hashhash命令用來(lái)顯示、添加和清除哈希表。該命令的語(yǔ)法格式如下所示。語(yǔ)法
hash [-l] [-r] [-p <path> <name>] [-t <command>]選項(xiàng)說(shuō)明
| 選項(xiàng) | 說(shuō)明 |
| -l | 顯示哈希表,包括路徑 |
| -r | 清除哈希表 |
| -p <path> <name> | 向哈希表中增加內(nèi)容 |
| -t <command> | 顯示指定命令的完整路徑 |
HASH命令
hash 每次傳輸完數(shù)據(jù)緩沖區(qū)中的數(shù)據(jù)后就顯示一個(gè)#號(hào)5休閑活動(dòng)
轉(zhuǎn)載于:https://blog.51cto.com/yuehaoyisheng/1334352
總結(jié)
- 上一篇: JavaScript Book Plan
- 下一篇: git delete file remo