1. 程式人生 > >據說,80%的人都搞不懂雜湊演算法 區塊鏈 雜湊演算法

據說,80%的人都搞不懂雜湊演算法 區塊鏈 雜湊演算法

本文約9000字+,閱讀(觀看)需要52分鐘

聊到區塊鏈的時候也少不了會聽到“雜湊”、“雜湊函式”、“雜湊演算法”,是不是聽得一頭霧水?別急,這一講我們來講講什麼是雜湊演算法。

雜湊是一種加密演算法

雜湊函式(Hash Function),也稱為雜湊函式或雜湊函式。雜湊函式是一個公開函式,可以將任意長度的訊息M對映成為一個長度較短且長度固定的值H(M),稱H(M)為雜湊值、雜湊值(Hash Value)、雜湊值或者訊息摘要(Message Digest)。它是一種單向密碼體制,即一個從明文到密文的不可逆對映,只有加密過程,沒有解密過程。

它的函式表示式為:h=H(m)

無論輸入是什麼數字格式、檔案有多大,輸出都是固定長度的位元串。以比特幣使用的Sh256演算法為例,無論輸入是什麼資料檔案,輸出就是256bit。

每個bit就是一位0或者1,256bit就是256個0或者1二進位制數字串,用16進位制數字表示的話,就是多少位呢?

16等於2的4次方,所以每一位16進位制數字可以代表4位bit。那麼,256位bit用16進位制數字表示,當然是256除以4等於64位。

於是你通常看到的雜湊值,就是這樣的了:

00740f40257a13bf03b40f54a9fe398c79a664bb21cfa2870ab07888b21eeba8。

這是從btc.com上隨便拷貝的一個雜湊值,不放心的話你可以數一下,是不是64位~

Hash函式的特點

Hash函式具有如下特點。

易壓縮:對於任意大小的輸入x,Hash值的長度很小,在實際應用中,函式H產生的Hash值其長度是固定的。

易計算:對於任意給定的訊息,計算其Hash值比較容易。單向性:對於給定的Hash值,要找到使得在計算上是不可行的,即求Hash的逆很困難。在給定某個雜湊函式H和雜湊值H(M)的情況下,得出M在計算上是不可行的。即從雜湊輸出無法倒推輸入的原始數值。這是雜湊函式安全性的基礎。抗碰撞性:理想的Hash函式是無碰撞的,但在實際演算法的設計中很難做到這一點。有兩種抗碰撞性:一種是弱抗碰撞性,即對於給定的訊息,要發現另一個訊息,滿足在計算上是不可行的;另一種是強抗碰撞性,即對於任意一對不同的訊息,使得在計算上也是不可行的。高靈敏性:這是從位元位角度出發的,指的是1位元位的輸入變化會造成1/2的位元位發生變化。訊息M的任何改變都會導致雜湊值H(M)發生改變。即如果輸入有微小不同,雜湊運算後的輸出一定不同。

雜湊演算法

把網址A,轉換成數字1。網址B,轉換成數字2。

一個網址X,轉換成數字N,根據數字N作為下標,就可以快速地查找出網址X的資訊。這個轉換的過程就是雜湊演算法。

比如這裡有一萬首歌,給你一首新的歌X,要求你確認這首歌是否在那一萬首歌之內。

無疑,將一萬首歌一個一個比對非常慢。但如果存在一種方式,能將一萬首歌的每首資料濃縮到一個數字(稱為雜湊碼)中,於是得到一萬個數字,那麼用同樣的演算法計算新的歌X的編碼,看看歌X的編碼是否在之前那一萬個數字中,就能知道歌X是否在那一萬首歌中。

作為例子,如果要你組織那一萬首歌,一個簡單的雜湊演算法就是讓歌曲所佔硬碟的位元組數作為雜湊碼。這樣的話,你可以讓一萬首歌“按照大小排序”,然後遇到一首新的歌,只要看看新的歌的位元組數是否和已有的一萬首歌中的某一首的位元組數相同,就知道新的歌是否在那一萬首歌之內了。

一個可靠的雜湊演算法,應該滿足:

對於給定的資料M,很容易算出雜湊值X=F(M);根據X很難反算出M;很難找到M和N使得F(N)=F(M)

前面提到雜湊函式具有抗碰撞性,碰撞性就是指有人實現找出一奇一偶使得雜湊結果一致,但這在計算上是不可行的。

首先,把大空間的訊息壓縮到小空間上,碰撞肯定是存在的。假設雜湊值長度固定為256位,如果順序取1,2,…2^256+1, 這2^256+1個輸入值,逐一計算其雜湊值,肯定能找到兩個輸入值使得其雜湊值相同。但不要高興的太早,因為你得有時間把它算出來,才是你的。

根據生日悖論,如果隨機挑選其中的2^128+1輸入,則有99.8%的概率發現至少一對碰撞輸入。那麼對於雜湊值長度為256位的雜湊函式,平均需要完成2^128次雜湊計算,才能找到碰撞對。如果計算機每秒進行10000次雜湊計算,需要約10^27年才能完成2^128次雜湊計算。在區塊鏈中,雜湊函式的抗碰撞性用來做區塊和交易的完整性驗證,一有篡改就能被識別出來。

前面提到挖礦需要礦工通過隨機數不斷計算得到小於給定難度值的數值。難度值(difficulty)是礦工們挖礦時的重要參考指標,它決定了礦工大約需要經過多少次雜湊運算才能產生一個合法的區塊。比特幣的區塊大約每10分鐘生成一個,為了讓新區塊的產生基本保持這個速率,難度值必須根據全網算力的變化進行調整。

雜湊函式通過調整難度值來確保每個區塊挖出的時間都大約在10分鐘,雜湊函式計算的難度值對保證區塊鏈系統的安全意義重大。正如美國的幾位電腦科學家在共同所著的書中所寫的:“雜湊密碼是密碼學中的瑞士軍刀,它們在眾多各具特色的應用中找到了一席之地,為了保證安全,不同的應用會要求不同的雜湊函式特點。事實已經證明,要確定一系列雜湊函式以全面達成可證安全極度困難。”

工作量證明需要有一個目標值。比特幣工作量證明的目標值(target)的計算公式如下:

目標值=最大目標值 / 難度值

其中,最大目標值為一個恆定值:

0x00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

目標值的大小與難度值成反比。比特幣工作量證明的達成就是礦工計算出來的區塊雜湊值必須小於目標值。

我們也可以簡單理解成,比特幣工作量證明的過程,就是通過不停地變換區塊頭(即嘗試不同的隨機值)作為輸入進行SHA256雜湊運算,找出一個特定格式雜湊值的過程(即要求有一定數量的前導0)。而要求的前導0的個數越多,代表難度越大。

舉個栗子幫助理解

▌場景一、小星和阿呆在籃球場

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

阿呆:呵呵,你的小心思我還不知道,你自己也口渴了吧,你去,我不去。

小星:哎哎,咱們不扯這些沒用的,來拋硬幣,好不好,正面你去,反面我去,公平吧,如何?

阿呆:好吧。

………

▌場景二、小星與阿呆即時聊天中

阿呆:小星,今天來我家玩,來的路上,有一家披薩店,很好吃,順便帶一點哈。

小星:哦,要不你來我家玩吧,你順便帶上披薩。

阿呆:小星,你竟然都這麼說了,看來只能拋硬幣解決了。

小星:丫的,這個怎麼拋,我怎麼知道你有沒有搞鬼。

阿呆:嗯,那到也是,要不這樣。

1考慮對結果加密

阿呆:我心中想一個數,假設為A,然後A在乘以一個數B,得到結果C。A是我的金鑰,我把結果C告訴你。你來猜A是奇數還是偶數,猜中了,算你贏。

小星:這不行,如果你告訴我C是12,我猜A是奇數,你可以說A是4,B是3。我猜A是偶數,你可以說A是3,B是4。要不你告訴我C是多少的時候,也告訴我B是多少。

阿呆:那這不行,告訴你C和B,不等於告訴你A是多少了,還猜個屁。不行得換個方式。

2不可逆加密

阿呆:小星,你看這樣可以不,我想一個A,經過下面的過程:

1.A+123=B2.B^2=C3.取C中第2~4位數,組成一個3位數D4.D/12的結果求餘數,得到E

阿呆:我把E和上述計算方式都告訴你,你猜A是奇數還是偶數,然後我告訴你A是多少,你可以按上述的計算過程來驗證我是否有說謊。

小星:嗯,我想想,假如阿呆你想的A為5,那麼:

5+123=128128^2=16384D=638 E=638mod12=53

(mod表示除法的求餘數)

小星:咦,厲害了,一個A值對應一個唯一的E值,根據E還推算不出來A。你太賤了,好吧,這個算公平,誰撒謊都能被識別出來。

小星:阿呆,你出題吧 ……

這種丟掉一部分資訊的加密方式稱為“單向加密”,也叫雜湊演算法。

常見的雜湊演算法

1SHA-1演算法

SHA-1的輸入是最大長度小於264位的訊息,輸入訊息以512位的分組為單位進行處理,輸出是160位的訊息摘要。SHA-1具有實現速度高、容易實現、應用範圍廣等優點,其演算法描述如下。

對輸入的訊息進行填充:經過填充後,訊息的長度模512應與448同餘。填充的方式為第一位是1,餘下各位都為0。再將訊息被填充前的長度以big-endian的方式附加在上一步留下的最後64位中。該步驟是必須的,即使訊息的長度已經是所希望的長度。填充的長度範圍是1到512。

初始化緩衝區:可以用160位來存放Hash函式的初始變數、中間摘要及最終摘要,但首先必須進行初始化,對每個32位的初始變數賦值,即:

進入訊息處理主迴圈,處理訊息塊:一次處理512位的訊息塊,總共進行4輪處理,每輪進行20次操作,如圖所示。這4輪處理具有類似的結構,但每輪所使用的輔助函式和常數都各不相同。每輪的輸入均為當前處理的訊息分組和緩衝區的當前值A、B、C、D、E,輸出仍放在緩衝區以替代舊的A、B、C、D、E的值。第四輪的輸出再與第一輪的輸入CVq相加,以產生CVq+1,其中加法是緩衝區5個字CVq中的每個字與中相應的字模232相加。

圖 單個512位訊息塊的處理流程

輸出:所有的訊息分組都被處理完之後,最後一個分組的輸出即為得到的訊息摘要值。

SHA-1的步函式如圖所示,它是SHA-1最為重要的函式,也是SHA-1中最關鍵的部件。

圖 SHA-1的步函式

SHA-1每執行一次步函式,A、B、C、D的值就會依次賦值給B、C、D、E這幾個暫存器。同時,A、B、C、D、E的輸入值、常數和子訊息塊在經過步函式運算後就會賦值給A。

其中,t是步數,0≤t≤79,Wt是由當前512位長的分組匯出的一個32位的字,Kt是加法常量。

基本邏輯函式f的輸入是3個32位的字,輸出是一個32位的字,其函式表示如下。

對於每個輸入分組匯出的訊息分組wt,前16個訊息字wt(0≤t≤15)即為訊息輸入分組對應的16個32位字,其餘wt(0≤t≤79)可按如下公式得到:

其中,ROTLs表示左迴圈移位s位,如圖所示。

圖 SHA-1的80個訊息字的產生過程

2SHA-2演算法

SHA-2系列Hash演算法,其輸出長度可取SHA-2系列雜湊演算法的輸出長度可取224位、256位、384位、512位,分別對應SHA-224、SHA-256、SHA-384、SHA-512。它還包含另外兩個演算法:SHA-512/224、SHA-512/256。比之前的Hash演算法具有更強的安全強度和更靈活的輸出長度,其中SHA-256是常用的演算法。下面將對前四種演算法進行簡單描述。

SHA-256演算法

SHA-256演算法的輸入是最大長度小於264位的訊息,輸出是256位的訊息摘要,輸入訊息以512位的分組為單位進行處理。演算法描述如下。

(1)訊息的填充

新增一個“1”和若干個“0”使其長度模512與448同餘。在訊息後附加64位的長度塊,其值為填充前訊息的長度。從而產生長度為512整數倍的訊息分組,填充後訊息的長度最多為264位。

(2)初始化連結變數

連結變數的中間結果和最終結果儲存於256位的緩衝區中,緩衝區用8個32位的暫存器A、B、C、D、E、F、G和H表示,輸出仍放在緩衝區以代替舊的A、B、C、D、E、F、G、H。首先要對連結變數進行初始化,初始連結變數儲存於8個暫存器A、B、C、D、E、F、G和H中:

初始連結變數是取自前8個素數(2、3、5、7、11、13、17、19)的平方根的小數部分其二進位制表示的前32位。

(3)處理主迴圈模組

訊息塊是以512位分組為單位進行處理的,要進行64步迴圈操作(如圖所示)。每一輪的輸入均為當前處理的訊息分組和得到的上一輪輸出的256位緩衝區A、B、C、D、E、F、G、H的值。每一步中均採用了不同的訊息字和常數,下面將給出它們的獲取方法。

圖 SHA-256的壓縮函式

(4)得出最終的Hash值

所有512位的訊息塊分組都處理完以後,最後一個分組處理後得到的結果即為最終輸出的256位的訊息摘要。

步函式是SHA-256中最為重要的函式,也是SHA-256中最關鍵的部件。其運算過程如圖所示。

圖 SHA-256的步函式

根據T1、T2的值,對暫存器A、E進行更新。A、B、C、E、F、G的輸入值則依次賦值給B、C、D、F、G、H。

Kt的獲取方法是取前64個素數(2,3,5,7,……)立方根的小數部分,將其轉換為二進位制,然後取這64個數的前64位作為Kt。其作用是提供了64位隨機串集合以消除輸入資料裡的任何規則性。

對於每個輸入分組匯出的訊息分組Wt,前16個訊息字Wt(0≤t≤15)直接按照訊息輸入分組對應的16個32位字,其他的則按照如下公式來計算得出:

圖 SHA-256的64個訊息字的生成過程

SHA-512演算法

SHA-512是SHA-2中安全效能較高的演算法,主要由明文填充、訊息擴充套件函式變換和隨機數變換等部分組成,初始值和中間計算結果由8個64位的移位暫存器組成。該演算法允許輸入的最大長度是2128位,併產生一個512位的訊息摘要,輸入訊息被分成若干個1024位的塊進行處理,具體引數為:訊息摘要長度為512位;訊息長度小於2128位;訊息塊大小為1024位;訊息字大小為64位;步驟數為80步。下圖顯示了處理訊息、輸出訊息摘要的整個過程,該過程的具體步驟如下。

圖 SHA-512的整體結構

訊息填充:填充一個“1”和若干個“0”,使其長度模1024與896同餘,填充位數為0-1023,填充前訊息的長度以一個128位的欄位附加到填充訊息的後面,其值為填充前訊息的長度。

連結變數初始化:連結變數的中間結果和最終結果都儲存於512位的緩衝區中,緩衝區用8個64位的暫存器A、B、C、D、E、F、G、H表示。初始連結變數也儲存於8個暫存器A、B、C、D、E、F、G、H中,其值為:

初始連結變數採用big-endian方式儲存,即字的最高有效位元組儲存於低地址位置。初始連結變數取自前8個素數的平方根的小數部分其二進位制表示的前64位。

主迴圈操作:以1024位的分組為單位對訊息進行處理,要進行80步迴圈操作。每一次迭代都把512位緩衝區的值A、B、C、D、E、F、G、H作為輸入,其值取自上一次迭代壓縮的計算結果,每一步計算中均採用了不同的訊息字和常數。計算最終的Hash值:訊息的所有N個1024位的分組都處理完畢之後,第N次迭代壓縮輸出的512位連結變數即為最終的Hash值。

步函式是SHA-512中最關鍵的部件,其運算過程類似SHA-256。每一步的計算方程如下所示,B、C、D、F、G、H的更新值分別是A、B、C、E、F、G的輸入狀態值,同時生成兩個臨時變數用於更新A、E暫存器。

對於80步操作中的每一步t,使用一個64位的訊息字Wt,其值由當前被處理的1024位訊息分組Mi匯出,匯出方法如圖所示。前16個訊息字Wt(0≤t≤15)分別對應訊息輸入分組之後的16個32位字,其他的則按照如下公式來計算得出:

圖 SHA-512的80個訊息字生成的過程

其中,

式中,ROTRn(X)表示對64位的變數x迴圈右移n位,SHRn(X)表示對64位的變數x右移n位。

從圖可以看出,在前16步處理中,Wt的值等於訊息分組中相對應的64位字,而餘下的64步操作中,其值是由前面的4個值計算得到的,4個值中的兩個要進行移位和迴圈移位操作。

Kt的獲取方法是取前80個素數(2,3,5,7,……)立方根的小數部分,將其轉換為二進位制,然後取這80個數的前64位作為Kt,其作用是提供了64位隨機串集合以消除輸入資料裡的任何規則性。

SHA-224與SHA-384

SHA-256和SHA-512是很新的Hash函式,前者定義一個字為32位,後者則定義一個字為64位。實際上二者的結構是相同的,只是在迴圈執行的次數、使用常數上有所差異。SHA-224及SHA-384則是前述兩種Hash函式的截短型,它們利用不同的初始值做計算。

SHA-224的輸入訊息長度跟SHA-256的也相同,也是小於264位,其分組的大小也是512位,其處理流程跟SHA-256也基本一致,但是存在如下兩個不同的地方。

SHA-224的訊息摘要取自A、B、C、D、E、F、G共7個暫存器的位元字,而SHA-256的訊息摘要取自A、B、C、D、E、F、G、H共8個暫存器的32位元字。SHA-224的初始連結變數與SHA-256的初始連結變數不同,它採用高階格式儲存,但其初始連結變數的獲取方法是取前第9至16個素數(23、29、31、37、41、43、47、53)的平方根的小數部分其二進位制表示的第二個32位,SHA-224的初始連結變數如下:

SHA-224的詳細計算步驟與SHA-256一致。

SHA-384的輸入訊息長度跟SHA-512相同,也是小於2128位,而且其分組的大小也是1024位,處理流程跟SHA-512也基本一致,但是也有如下兩處不同的地方。

SHA-384的384位的訊息摘要取自A、B、C、D、E、F共6個64位元字,而SHA-512的訊息摘要取自A、B、C、D、E、F、G、H共8個64位元字。SHA-384的初始連結變數與SHA-512的初始連結變數不同,它也採用高階格式儲存,但其初始連結變數的獲取方法是取前9至16個素數(23、29、31、37、41、43、47、53)的平方根的小數部分其二進位制表示的前64位,SHA-384的初始連結變數如下:

SHA-384的詳細計算步驟與SHA-512的相同。

3SHA-3演算法

SHA-3演算法整體採用Sponge結構,分為吸收和榨取兩個階段。SHA-3的核心置換f作用在5×5×64的三維矩陣上。整個f共有24輪,每輪包括5個環節θ、ρ、π、χ、τ。演算法的5個環節分別作用於三維矩陣的不同維度之上。θ環節是作用在列上的線性運算;ρ環節是作用在每一道上的線性運算,將每一道上的64位元進行迴圈移位操作;π環節是將每道上的元素整體移到另一道上的線性運算;χ環節是作用在每一行上的非線性運算,相當於將每一行上的5位元替換為另一個5位元;τ環節是加常數環節。

目前,公開文獻對SHA-3演算法的安全性分析主要是從以下幾個方面來展開的。

對SHA-3演算法的碰撞攻擊、原像攻擊和第二原像攻擊。對SHA-3演算法核心置換的分析,這類分析主要針對演算法置換與隨機置換的區分來展開。對SHA-3演算法的差分特性進行展開,主要研究的是SHA-3置換的高概率差分鏈,並構築差分割槽分器。

Keccak演算法的立體加密思想和海綿結構,使SHA-3優於SHA-2,甚至AES。Sponge函式可建立從任意長度輸入到任意長度輸出的對映。

相關推薦

據說80%的演算法 區塊 演算法

本文約9000字+,閱讀(觀看)需要52分鐘 聊到區塊鏈的時候也少不了會聽到“雜湊”、“雜湊函式”、“雜湊演算法”,是不是聽得一頭霧水?別急,這一講我們來講講什麼是雜湊演算法。 雜湊是一種加密演算法 雜湊函式(Hash Function),也稱為雜湊函式或雜湊函式。雜湊函式是一個

關於函式引數傳遞80%錯了

還記得上一次關於變數作用域文章 :Crossin:全菊變數和菊部變數zhuanlan.zhihu.com我們在公眾號(Crossin的程式設計教室)裡做了個問題投票:def func(m): m[0] = 20 m = [4, 5, 6] return m l = [1,

BTA | 孟巖:關於經濟系統設計很多混了!請記住三大原則——反龐氏、增長、透明!

3月30日~3月31日,由CSDN、火星財經主辦,中關村區塊鏈產業聯盟、柏鏈道捷、區塊鏈大本營、

微信小程式大多數錯的八個問題

宣告:本文為CSDN原創投稿文章。 作者:王安,數字天堂DCloud公司創始人兼CEO 責編:陳秋歌,關注微信開發等領域,尋求報道或者投稿請發郵件chenqg#csdn.net。研發心得、專案實戰、前沿技術、外文翻譯……,只要是技術乾貨,十分

救救孩子吧到現在還TCP的三次握手四次揮手

> 本文在個人技術部落格同步釋出,詳情可[**用力戳**](https://www.17coding.info/article/33) > 亦可掃描螢幕右側二維碼關注個人公眾號,公眾號內有個人聯絡方式,等你來撩...   前幾天發了一個朋友圈,發現暗戀已久的女生給我點了個贊,於是我

別傻啦會高數你連

你還在用買菜來搪塞高數 別傻啦,不懂高數你連人話都聽不懂 先別急著反駁我,我們先看幾個例子: 這是這10年來房價調控時的政府態度: 1,保持房價基本穩定 2、新建住房價格漲幅不高於GDP/人均收入增長/10% 3、堅決遏制部分城市房價過快上漲 4、過去五年,遏制了房價過快上漲的勢頭(2013年政

論文你還什麼人工智慧?

轉載自https://blog.csdn.net/kwame211/article/details/78109304本次 Chat 的第一部分:首先講解如何從零基礎開始閱讀一篇機器學習方向的論文,以及對待論文中的數學問題。隨後,從一篇經典論文入手,講解如何快速梳理和理解一個深

這個季節吃茄子能治療7種疾病很多知道!

otto nor 也有 5.6 cal span .cn http enter 這個季節吃茄子能治療7種疾病,很多人都不知道! 2016-04-26 都市報道擴大版 茄子的功效有什麽?茄子含有維生素E,有防止出血和抗衰老功能,常吃茄子,可使血液中膽固醇水

UML基本語法就放棄學UML吧~

百度百科上面對UML的解釋: 簡單地說,UML是軟體開發的圖紙——它對於軟體的意義就像建築物的圖紙對於建築物一樣。 這裡主要解釋基本語法(以下使用starUML繪製): 類(class): 一般來說,類圖用這樣的矩形表示,第一行是類名(抽象類類名用斜體),第二行是類的

這30個以太坊開發示例讓你成為80走的區塊人才!

2018年已過了大半,幣圈跌跌蕩蕩,而鏈圈的人在等待鳳凰涅槃,熊市專心做技術,牛市才能一展身手、衝破雲霄! 本文主要告訴你,如何成為一名優秀的以太坊開發者! 如果你是以太坊開發者中的“老司機”,請直接看最後一部分:30個為你量身定做的挑戰示例! 如果你是以太坊

Python 正則表示式實戰篇! 再? 算我輸~

整理自: Automate the Boring Stuff with Python 作者: Al Sweigart 1. 建立正則表示式物件和匹配Regex物件 向 re.compile() 傳入一個字串值,表示正則表示式,它將返回一個 Regex

背景圖定位實現視覺錯屏效果一般知道的效果

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <

NGUI panel裁剪shader解讀(一般估計看慎點)

單層panel邊緣漸隱 ClipRange: 1/cy.z,1/cr.w,cr.x/cr.z,cr.y/cr.w 解讀:cr.x cr.y panel的中心座標, cr.z半寬,cr.w 半高 ClipArgs: cr.z/softness.x, cr.

昨天游標能夠跟隨了不過系統呼叫能正常工作還沒找到原因暫時也就這樣吧

/************************************************************************/ /* Macros Declaration

Chrome 中的這個彩蛋很多知道

當 Chrome 無法連線到網際網路時, 或者上著網突然掉線,重新整理頁面時報錯, 此時錯誤提示上方都會有一隻小短手霸王龍。嗯,表面上看起來也沒什麼特別之處,因為小短手在早期 Chrome 中有了。但一按空格鍵(或方向鍵 ↑ ),你就打開了一扇神奇之門! 往下看

史上最全的ASP.NET MVC路由配置以後RouteConfig再弄神仙難救你啦~

繼續延續坑爹標題系列。其實只是把apress.pro.asp.net.mvc.4.framework裡的CHAPTER 13翻譯過來罷了,當做自己總結吧。內容看看就好,排版就不要吐槽了,反正我知道你也不會反對的。 先說一下基本的路由規則原則。基本的路由規則是

史上最全的ASP.NET MVC路由配置以後RouteConfig再弄神仙難救你啦

繼續延續坑爹標題系列。其實只是把apress.pro.asp.net.mvc.4.framework裡的CHAPTER 13翻譯過來罷了,當做自己總結吧。內容看看就好,排版就不要吐槽了,反正我知道你也不會反對的。 XD 首先說URL的構造。 其實這個也談不上構造,只是語

想學習大數Hadoop?阿裏雲工程師帶你三步解讀Hadoop!

大數 網易 挖掘 支持 文件存儲 規模 淘寶 階段 設計 一、什麽是Hadoop? Google發表了兩篇論文:描述如何以分布式方式存儲海量數據的Google文件系統和描述如何處理大規模分布式數據的MapReduce:大型集群上的簡化數據處理。受這兩篇論文的啟發,DougC

Spring Aop的一個簡單列子 (確實淺顯易懂好文章!寫的太棒了之前幾天AOP。。瞬間被他講了)

  先了解AOP的相關術語:1.通知(Advice):通知定義了切面是什麼以及何時使用。描述了切面要完成的工作和何時需要執行這個工作。2.連線點(Joinpoint):程式能夠應用通知的一個“時機”,這些“時機”就是連線點,例如方法被呼叫時、異常被丟擲時等等。3.切入點(Pointcut)通知定義了切面要發生

讓所有能看日誌解放開發

  作為普通開發,可能都有過這種感受,正在瘋狂的coding運營 測試跑過來,有投訴,線上出問題了、有報警,線上出問題了,內心不免一驚仔細排查後發現:第三方問題,要找第三方解決、網路問題要找網路組解決、配置錯誤,你們運營配置有誤、正常業務錯誤,使用者輸入資料有誤,等等等,一方便耽誤了我們coding改變世界,