當前位置:首頁 » 區塊鏈知識 » 區塊鏈rfc

區塊鏈rfc

發布時間: 2022-05-19 12:08:37

1. 誰能幫我解解這個加密的MD5

MD5的全稱是Message-Digest Algorithm 5(信息-摘要演算法),在90年代初由MIT Laboratory for Computer Science和RSA Data Security Inc的Ronald L. Rivest開發出來,經MD2、MD3和MD4發展而來。它的作用是讓大容量信息在用數字簽名軟體簽署私人密匙前被"壓縮"成一種保密的格式(就是把一個任意長度的位元組串變換成一定長的大整數)。不管是MD2、MD4還是MD5,它們都需要獲得一個隨機長度的信息並產生一個128位的信息摘要。雖然這些演算法的結構或多或少有些相似,但MD2的設計與MD4和MD5完全不同,那是因為MD2是為8位機器做過設計優化的,而MD4和MD5卻是面向32位的電腦。這三個演算法的描述和C語言源代碼在Internet RFCs 1321中有詳細的描述(http://www.ietf.org/rfc/rfc1321.txt),這是一份最權威的文檔,由Ronald L. Rivest在1992年8月向IEFT提交。

Rivest在1989年開發出MD2演算法。在這個演算法中,首先對信息進行數據補位,使信息的位元組長度是16的倍數。然後,以一個16位的檢驗和追加到信息末尾。並且根據這個新產生的信息計算出散列值。後來,Rogier和Chauvaud發現如果忽略了檢驗和將產生MD2沖突。MD2演算法的加密後結果是唯一的--既沒有重復。

為了加強演算法的安全性,Rivest在1990年又開發出MD4演算法。MD4演算法同樣需要填補信息以確保信息的位元組長度加上448後能被512整除(信息位元組長度mod 512 = 448)。然後,一個以64位二進製表示的信息的最初長度被添加進來。信息被處理成512位Damg?rd/Merkle迭代結構的區塊,而且每個區塊要通過三個不同步驟的處理。Den Boer和Bosselaers以及其他人很快的發現了攻擊MD4版本中第一步和第三步的漏洞。Dobbertin向大家演示了如何利用一部普通的個人電腦在幾分鍾內找到MD4完整版本中的沖突(這個沖突實際上是一種漏洞,它將導致對不同的內容進行加密卻可能得到相同的加密後結果)。毫無疑問,MD4就此被淘汰掉了。

盡管MD4演算法在安全上有個這么大的漏洞,但它對在其後才被開發出來的好幾種信息安全加密演算法的出現卻有著不可忽視的引導作用。除了MD5以外,其中比較有名的還有SHA-1、RIPE-MD以及HAVAL等。

一年以後,即1991年,Rivest開發出技術上更為趨近成熟的MD5演算法。它在MD4的基礎上增加了"安全-帶子"(Safety-Belts)的概念。雖然MD5比MD4稍微慢一些,但卻更為安全。這個演算法很明顯的由四個和MD4設計有少許不同的步驟組成。在MD5演算法中,信息-摘要的大小和填充的必要條件與MD4完全相同。Den Boer和Bosselaers曾發現MD5演算法中的假沖突(Pseudo-Collisions),但除此之外就沒有其他被發現的加密後結果了。

Van Oorschot和Wiener曾經考慮過一個在散列中暴力搜尋沖突的函數(Brute-Force Hash Function),而且他們猜測一個被設計專門用來搜索MD5沖突的機器(這台機器在1994年的製造成本大約是一百萬美元)可以平均每24天就找到一個沖突。但單從1991年到2001年這10年間,竟沒有出現替代MD5演算法的MD6或被叫做其他什麼名字的新演算法這一點,我們就可以看出這個瑕疵並沒有太多的影響MD5的安全性。上面所有這些都不足以成為MD5的在實際應用中的問題。並且,由於MD5演算法的使用不需要支付任何版權費用的,所以在一般的情況下(非絕密應用領域。但即便是應用在絕密領域內,MD5也不失為一種非常優秀的中間技術),MD5怎麼都應該算得上是非常安全的了。

演算法的應用

MD5的典型應用是對一段信息(Message)產生信息摘要(Message-Digest),以防止被篡改。比如,在UNIX下有很多軟體在下載的時候都有一個文件名相同,文件擴展名為.md5的文件,在這個文件中通常只有一行文本,大致結構如:

MD5 (tanajiya.tar.gz) =

這就是tanajiya.tar.gz文件的數字簽名。MD5將整個文件當作一個大文本信息,通過其不可逆的字元串變換演算法,產生了這個唯一的MD5信息摘要。如果在以後傳播這個文件的過程中,無論文件的內容發生了任何形式的改變(包括人為修改或者下載過程中線路不穩定引起的傳輸錯誤等),只要你對這個文件重新計算MD5時就會發現信息摘要不相同,由此可以確定你得到的只是一個不正確的文件。如果再有一個第三方的認證機構,用MD5還可以防止文件作者的"抵賴",這就是所謂的數字簽名應用。

MD5還廣泛用於加密和解密技術上。比如在UNIX系統中用戶的密碼就是以MD5(或其它類似的演算法)經加密後存儲在文件系統中。當用戶登錄的時候,系統把用戶輸入的密碼計算成MD5值,然後再去和保存在文件系統中的MD5值進行比較,進而確定輸入的密碼是否正確。通過這樣的步驟,系統在並不知道用戶密碼的明碼的情況下就可以確定用戶登錄系統的合法性。這不但可以避免用戶的密碼被具有系統管理員許可權的用戶知道,而且還在一定程度上增加了密碼被破解的難度。

正是因為這個原因,現在被黑客使用最多的一種破譯密碼的方法就是一種被稱為"跑字典"的方法。有兩種方法得到字典,一種是日常搜集的用做密碼的字元串表,另一種是用排列組合方法生成的,先用MD5程序計算出這些字典項的MD5值,然後再用目標的MD5值在這個字典中檢索。我們假設密碼的最大長度為8位位元組(8 Bytes),同時密碼只能是字母和數字,共26+26+10=62個字元,排列組合出的字典的項數則是P(62,1)+P(62,2)….+P(62,8),那也已經是一個很天文的數字了,存儲這個字典就需要TB級的磁碟陣列,而且這種方法還有一個前提,就是能獲得目標賬戶的密碼MD5值的情況下才可以。這種加密技術被廣泛的應用於UNIX系統中,這也是為什麼UNIX系統比一般操作系統更為堅固一個重要原因。

演算法描述

對MD5演算法簡要的敘述可以為:MD5以512位分組來處理輸入的信息,且每一分組又被劃分為16個32位子分組,經過了一系列的處理後,演算法的輸出由四個32位分組組成,將這四個32位分組級聯後將生成一個128位散列值。

在MD5演算法中,首先需要對信息進行填充,使其位元組長度對512求余的結果等於448。因此,信息的位元組長度(Bits Length)將被擴展至N*512+448,即N*64+56個位元組(Bytes),N為一個正整數。填充的方法如下,在信息的後面填充一個1和無數個0,直到滿足上面的條件時才停止用0對信息的填充。然後,在在這個結果後面附加一個以64位二進製表示的填充前信息長度。經過這兩步的處理,現在的信息位元組長度=N*512+448+64=(N+1)*512,即長度恰好是512的整數倍。這樣做的原因是為滿足後面處理中對信息長度的要求。

MD5中有四個32位被稱作鏈接變數(Chaining Variable)的整數參數,他們分別為:A=0x01234567,B=0x89abcdef,C=0xfedcba98,D=0x76543210。

當設置好這四個鏈接變數後,就開始進入演算法的四輪循環運算。循環的次數是信息中512位信息分組的數目。

將上面四個鏈接變數復制到另外四個變數中:A到a,B到b,C到c,D到d。

主循環有四輪(MD4隻有三輪),每輪循環都很相似。第一輪進行16次操作。每次操作對a、b、c和d中的其中三個作一次非線性函數運算,然後將所得結果加上第四個變數,文本的一個子分組和一個常數。再將所得結果向右環移一個不定的數,並加上a、b、c或d中之一。最後用該結果取代a、b、c或d中之一。
以一下是每次操作中用到的四個非線性函數(每輪一個)。

F(X,Y,Z) =(X&Y)|((~X)&Z)
G(X,Y,Z) =(X&Z)|(Y&(~Z))
H(X,Y,Z) =X^Y^Z
I(X,Y,Z)=Y^(X|(~Z))
(&是與,|是或,~是非,^是異或)

這四個函數的說明:如果X、Y和Z的對應位是獨立和均勻的,那麼結果的每一位也應是獨立和均勻的。
F是一個逐位運算的函數。即,如果X,那麼Y,否則Z。函數H是逐位奇偶操作符。

假設Mj表示消息的第j個子分組(從0到15),<<
FF(a,b,c,d,Mj,s,ti)表示a=b+((a+(F(b,c,d)+Mj+ti)<< GG(a,b,c,d,Mj,s,ti)表示a=b+((a+(G(b,c,d)+Mj+ti)<< HH(a,b,c,d,Mj,s,ti)表示a=b+((a+(H(b,c,d)+Mj+ti)<< II(a,b,c,d,Mj,s,ti)表示a=b+((a+(I(b,c,d)+Mj+ti)<<
這四輪(64步)是:

第一輪

FF(a,b,c,d,M0,7,0xd76aa478)
FF(d,a,b,c,M1,12,0xe8c7b756)
FF(c,d,a,b,M2,17,0x242070db)
FF(b,c,d,a,M3,22,0xc1bdceee)
FF(a,b,c,d,M4,7,0xf57c0faf)
FF(d,a,b,c,M5,12,0x4787c62a)
FF(c,d,a,b,M6,17,0xa8304613)
FF(b,c,d,a,M7,22,0xfd469501)
FF(a,b,c,d,M8,7,0x698098d8)
FF(d,a,b,c,M9,12,0x8b44f7af)
FF(c,d,a,b,M10,17,0xffff5bb1)
FF(b,c,d,a,M11,22,0x895cd7be)
FF(a,b,c,d,M12,7,0x6b901122)
FF(d,a,b,c,M13,12,0xfd987193)
FF(c,d,a,b,M14,17,0xa679438e)
FF(b,c,d,a,M15,22,0x49b40821)

第二輪

GG(a,b,c,d,M1,5,0xf61e2562)
GG(d,a,b,c,M6,9,0xc040b340)
GG(c,d,a,b,M11,14,0x265e5a51)
GG(b,c,d,a,M0,20,0xe9b6c7aa)
GG(a,b,c,d,M5,5,0xd62f105d)
GG(d,a,b,c,M10,9,0x02441453)
GG(c,d,a,b,M15,14,0xd8a1e681)
GG(b,c,d,a,M4,20,0xe7d3fbc8)
GG(a,b,c,d,M9,5,0x21e1cde6)
GG(d,a,b,c,M14,9,0xc33707d6)
GG(c,d,a,b,M3,14,0xf4d50d87)
GG(b,c,d,a,M8,20,0x455a14ed)
GG(a,b,c,d,M13,5,0xa9e3e905)
GG(d,a,b,c,M2,9,0xfcefa3f8)
GG(c,d,a,b,M7,14,0x676f02d9)
GG(b,c,d,a,M12,20,0x8d2a4c8a)

第三輪

HH(a,b,c,d,M5,4,0xfffa3942)
HH(d,a,b,c,M8,11,0x8771f681)
HH(c,d,a,b,M11,16,0x6d9d6122)
HH(b,c,d,a,M14,23,0xfde5380c)
HH(a,b,c,d,M1,4,0xa4beea44)
HH(d,a,b,c,M4,11,0x4bdecfa9)
HH(c,d,a,b,M7,16,0xf6bb4b60)
HH(b,c,d,a,M10,23,0xbebfbc70)
HH(a,b,c,d,M13,4,0x289b7ec6)
HH(d,a,b,c,M0,11,0xeaa127fa)
HH(c,d,a,b,M3,16,0xd4ef3085)
HH(b,c,d,a,M6,23,0x04881d05)
HH(a,b,c,d,M9,4,0xd9d4d039)
HH(d,a,b,c,M12,11,0xe6db99e5)
HH(c,d,a,b,M15,16,0x1fa27cf8)
HH(b,c,d,a,M2,23,0xc4ac5665)

第四輪

II(a,b,c,d,M0,6,0xf4292244)
II(d,a,b,c,M7,10,0x432aff97)
II(c,d,a,b,M14,15,0xab9423a7)
II(b,c,d,a,M5,21,0xfc93a039)
II(a,b,c,d,M12,6,0x655b59c3)
II(d,a,b,c,M3,10,0x8f0ccc92)
II(c,d,a,b,M10,15,0xffeff47d)
II(b,c,d,a,M1,21,0x85845dd1)
II(a,b,c,d,M8,6,0x6fa87e4f)
II(d,a,b,c,M15,10,0xfe2ce6e0)
II(c,d,a,b,M6,15,0xa3014314)
II(b,c,d,a,M13,21,0x4e0811a1)
II(a,b,c,d,M4,6,0xf7537e82)
II(d,a,b,c,M11,10,0xbd3af235)
II(c,d,a,b,M2,15,0x2ad7d2bb)
II(b,c,d,a,M9,21,0xeb86d391)

常數ti可以如下選擇:

在第i步中,ti是4294967296*abs(sin(i))的整數部分,i的單位是弧度。(4294967296等於2的32次方)
所有這些完成之後,將A、B、C、D分別加上a、b、c、d。然後用下一分組數據繼續運行演算法,最後的輸出是A、B、C和D的級聯。

當你按照我上面所說的方法實現MD5演算法以後,你可以用以下幾個信息對你做出來的程序作一個簡單的測試,看看程序有沒有錯誤。

MD5 ("") =
MD5 ("a") =
MD5 ("abc") =
MD5 ("message digest") =
MD5 ("abcdefghijklmnopqrstuvwxyz") =
MD5 ("") =

MD5 ("
01234567890") =

如果你用上面的信息分別對你做的MD5演算法實例做測試,最後得出的結論和標准答案完全一樣,那我就要在這里象你道一聲祝賀了。要知道,我的程序在第一次編譯成功的時候是沒有得出和上面相同的結果的。

MD5的安全性

MD5相對MD4所作的改進:

1. 增加了第四輪;

2. 每一步均有唯一的加法常數;

3. 為減弱第二輪中函數G的對稱性從(X&Y)|(X&Z)|(Y&Z)變為(X&Z)|(Y&(~Z));

4. 第一步加上了上一步的結果,這將引起更快的雪崩效應;

5. 改變了第二輪和第三輪中訪問消息子分組的次序,使其更不相似;

6. 近似優化了每一輪中的循環左移位移量以實現更快的雪崩效應。各輪的位移量互不相同。

2. 學編程的要求有哪些

俗話說,沒有金剛鑽,就別攬瓷器活兒。套用到
IT
業,英語不行,就別做程序員。網上關
於程序員學英語的文章不少,
但我想談談我自己的看法。
首先詳細討論一下為什麼程序員離
了英語不行,然後針對程序員應該怎麼學英語說說我的體會。

英語是計算機的母語,是程序的母語,所以必然是程序員的母語。
程序中的變數名、函數名
起得好不好是決定代碼質量和可維護性的最關鍵因素。
高質量的代碼應該是這樣的:
代碼基
本上是自解釋的(
self-explanatory
),不需要太多注釋,不管代碼的規模有多大,具有相
關知識背景的讀過文檔的人都可以立刻上手、
立刻參與維護和開發。
要想使代碼能夠自解釋,
給變數和函數起個好名字很關鍵,
很顯然,
只能用英文起名字,
一是用漢語拼音起名字可讀
性很差,二是英文單詞通常比漢語更
expressive
(看吧,如果用漢語來說,就得說「表達
能力更強」、「更有表現力」這么羅嗦)
,由於程序的復雜性,變數和函數往往表示一些很
抽象的概念,
起個既准確又簡潔的名字並不容易,
可是很多時候,
用漢語需要很多字才能說
清楚的一件事,用英文一個單詞再加點詞形變化就能說清楚了。例如
APUE
上講
sleep
函數
的實現,
其中有個變數表示「本來應該睡到某個時刻,
但是提前被信號喚醒了,
喚醒時與本
來應該睡到的時刻相差的時間」,
如果為了簡潔而不求准確,
這個變數名至少也得叫「未睡
到」,而書中只用了一個單詞
unslept
,非常准確、簡潔地表達了這個意思。為了寫程序而
學英語需要學到什麼水平?我認為能起出這種變數名就夠水平了。很多在
IT
外企工作的中
國人,說話寫文章經常夾雜著英文單詞(比我嚴重多了因為我不在外企),非常可以理解,
確實是為了表達得更准確簡潔的需要,而不是純為了
play
zhuangbility
。總之,要寫程序
必須學好英語,
否則連變數名都起不好,
這雖然是一個非技術問題,但卻是個根本問題,比
任何技術問題都重要。當然,現在很多編程語言也支持用
Unicode
字元給變數和函數起名,
但是你見過有人用漢字寫程序嗎?根本不實用。
有人會辯駁說一頁英文翻譯成中文往往只佔
半頁,中文不是更簡潔嗎?但是你算算打一頁英文和打半頁中文哪個敲鍵盤次數多。另外,
要讀別人的代碼也必須學好英語,如果你不知道
unslept
是由
sleep
變形而來的,就體會
不到其中的精妙,
只有大量閱讀高質量的代碼,
才能寫出高質量的代碼,
創作都是從模仿開
始的。

說說英語對於看書學習的重要性。
中文技術書和英文技術書的水平根本不在一個量級上,

是有很多原因的,
不能全歸結於中文書的作者水平差。
最重要的是,
出中文書的低回報率決
定了作者不可能花太多心血在上面,你去
amazon
看看一本書賣多少美刀,再去
chinapub
看看一本書賣幾塊錢。
老外寫一本書,
可以做到全書沒有一個拼寫錯誤
(當然英文的拼寫檢
查工具更完善也是部分原因),中文能找出一本沒有錯別字的書嗎?
Knuth
可以懸賞讓全世
界讀者來找磋,
中文書作者有哪個敢這么做?不是因為老外態度有多認真治學有多嚴謹,

是因為他們賺到了,就應該拿出高質量的作品來,不然會被讀者罵的。

英文技術書的翻譯質量通常很差。
也不能歸結於譯者的水平差,
我也翻譯過書,
也努力想譯
好,但真的很難譯好。
IT
業的新名詞層出不窮,像「內核」、「網路」這種常見術語還好,
稍微專一點的術語都沒有統一的譯名。
我們在教學中發現,
很多學員看書時搞不清這本書的
名詞
A
和那本書的名詞
B
是什麼區別,
來問老師,
才發現原來
A

B
就是一回事兒。
這是一
個單詞對應多個譯名的情況,
還有一個譯名對應多個單詞的情況,
比如
field

domain

realm
都譯成「域」,
block

bulk
都譯成「塊」,
argument

parameter
都譯成「參數」,
attribute

property
都譯成「屬性」,雖然這些詞的意思本來就差不多,但是在一篇文章

里,作者可以換著用,不同的單詞表示不同的概念,翻譯完了一看,都成一個概念了。英文
書背後都有
index
,看到一半忘了某個名詞是怎麼定義的就可以翻
index
,而譯文通常沒有
index
,名詞都已經亂七八糟了,沒法做
index
。還有更發指的是,老外喜歡造詞,現有的
單詞上加一點變化和組合(例如有人喜歡說
automagically
),看著心領神會,想譯出來就
很費勁。
老外即使在技術書中也經常用一些生動的表達方式和俏皮話,
而中文的書面語言非
常死板,
生動的表達方式只存在於口語中,
如果寫在書上就很不像話,
這也是很難翻譯的一
個重要原因。看中文譯本,不僅質量差,而且跟不上時代,通常一本英文書出來,至少要等
一到兩年才能看到中文譯本。
兩年啊!
等你看到這本書的中文譯本時,
這個版本都快淘汰了。

然後說說英語在開發工作中的重要性。
看書學習通常只起一個引導入門的作用,
在工作中更
有用的是手冊、文檔。學完了
C
語言開始寫程序了,誰還會去查
K&R
附錄中的庫函數?查
man page
才是最有效率的。然而手冊比入門書更少有中文譯版,因為手冊是隨時變的,會
隨著軟體版本更新,
而且需要看這些開發手冊的人通常不會有英文障礙,
有英文障礙的人即
使看了翻譯的手冊也寫不出好程序來,
所以當然沒必要翻譯了。
不管什麼技術,
官方的手冊
和技術標准才是最原始的第一手資料,
看別的書都是以訛傳訛,
由於自然語言不可避免是有
歧義的,
文檔中表達得不準確的地方就會被文檔的讀者也就是技術書的作者誤解,
技術書中
再有表達不準確的地方又被譯者誤解。
我們小時候都玩過傳話的游戲,
幾個人站一排,
通過
悄悄話傳一句話,傳到最後變成什麼了?所以,學網路協議,就得看
RFC
,學
ARM
,就得看
ARM
公司的
Architecture Reference Manual
,要學習
C
語言就得看
C99
,有歧義不要緊,
自己去揣測原作者的意思,總比道聽途說的可靠。

我們的學員出去面試經常被問到的一個問題就是:
在開發工作中遇到問題,
書和文檔上都沒
有答案,網上搜一下也沒有答案,怎麼辦?要我說,能看懂源代碼的就去源代碼中找答案,
這稱為
hacking
,不管是內核、
libc
還是各種
framework
,你調用的東西有問題都能從它的
代碼中找到原因。如果沒有能力
hacking
,或者時間緊不想去
hacking
,最好的辦法就是去
官方郵件列表和
IRC
問。
如果英文不行就沒辦法了,
只能去一些中文論壇:
「各位大蝦幫忙,
小弟有一個問題求救!
跪求!

在線等!


」在線等了好幾天也無人問津,
或者答非所問。
豈不知逛這些論壇的沒有大蝦,都是菜鳥,大蝦們都在
IRC
上聊得正歡呢。我在做
Qt
開發
時曾經有一個問題,
當時在教育網,
上國外網不方便,
去各大中文論壇問了好幾天也沒人給
出滿意的回答,後來花錢連了國外網,去
trolltech
官方新聞組提問,只等了幾分鍾就得
到了滿意的解決辦法。這次經歷給我留下了深刻印象,從此以後再也沒有去中文論壇。

那麼,
如果現在英文水平很差,
又想做程序員,
應該怎麼學英語呢?我下面說的方法有兩個
前提,
一是你的英文至少達到高中畢業水平,
也就是語法基本都學完了,
即使用得不熟練也
知道有那麼回事兒,二是你希望盡快在工作中用上英語,寫程序夠用就行,而不是有考
T

G
這樣的更高要求。

學習英語有聽說讀寫四個方面的要求,
做程序員至少需要讀和寫非常流暢,
如果在外企工作
還需要聽和說的能力。技術英語和考
T

G
是不一樣的,一是聽和說不像讀和寫那麼重要,
不必擔心自己是「聾啞英語」,
沒關系,
絲毫不影響你成為編程高手,
二是要求的詞彙量要
小得多。

T

G
都要拿一本單詞書背,
很少有人會覺得背單詞很有意思,
至少我是覺得很
痛苦,
幸運的是看技術書不需要多少詞彙量。
技術書的描述對象都是局限於一個很窄的領域
的,
就那麼幾個單詞翻來覆去地用,
而且技術書是為了讓人看懂的
(不像詩是為了讓人看不
懂的)
,比較復雜的詞在書中都有定義或解釋。有些作者喜歡賣弄詞彙量,
用一些很生僻的

單詞,也有些作者賣弄一些典故,由於文化背景不同很難理解,不過這些通常都可以無視,
不會影響閱讀,
還是因為技術書是為了讓人看懂的。
對於學習者來說,
閱讀能力是最重要的,
等你完成了學習,成為一個合格的開發者時,
需要寫代碼注釋,需要寫文檔,需要通過郵件
交流,寫作的能力才開始重要了。所以應該首先從閱讀開始練習英語。

現在就拿起一本英文原版書開始看吧。
和學游泳一樣,
閱讀的能力只能通過閱讀本身來練習。
我的經驗是,
不必先系統學習了單詞和語法再看書,
可以在看書時用到什麼就補什麼。
我建
議初學者看電子版,
因為現在的詞典軟體都可以滑鼠取詞,
邊看邊查很方便,
很多勤快人喜
歡把查過的單詞都抄下來,我覺得沒有必要,
反正查字典很方便,
下次再看到了就再查,多
查幾次總會記住的,
抄下來就打斷了看書的思路,
而且不見得抄下來就能記住。
也許是因為
我這人比較懶,
我用的都是懶辦法。
很多人不喜歡看電子書,
理由是盯著屏幕看書太累,那
么盯著屏幕寫程序累不累?這種人顯然不適合做程序員。
語法不熟練怎麼辦?大多數情況下
單詞的意思都明白了就不影響閱讀。
技術書有時候喜歡用長句,
其中可能包含各種從句,

果實在讀不懂就去查語法書,
同樣也不需要把這種從句徹底弄明白,
只要這一句能看過去就
行了,以後多查幾遍書,自然就掌握了。另外,技術書是說明文,通常不應該有過去時,看
到過去時就需要注意了,
很可能是虛擬語氣,
如果不注意這一點,
看到的意思可能和真實的
意思正好相反。

應該從哪本書開始看起呢?從你當前最需要學的技術書看起。
看書是相當花時間的,
如果能
一邊學英語一邊學技術,
這時間利用得就很有效率。
比如,
如果你的
C
語言已經學得相當好
了,不要專門為了學英語去重看一遍原版的
K&R
。市面上有一些專門的計算機英語教材,我
的建議是不要看,浪費時間,
nonsense

初學時最好選一本有中文譯本的書,有看不懂的地
方可以翻中文版來對照,
但是不要相信中文的翻譯,
原因在前面討論過了。
如果你是初學編
程,沒有任何基礎,我可以推薦一本英文很淺顯技術也很淺顯的書:
How To Think Like a
Computer Scientist
,有
Python

Java

C++
版本,可自由下載。

要逐漸養成良好的閱讀習慣。
一是不要每個生單詞都去查,
有些單詞很生僻,
查了也記不住,
記住了也不會再見到它了,
但是前面講過,
都是作者在賣弄詞彙量,
無視它絲毫不影響閱讀,
因此要學會猜測單詞的意思,能不查就不查,繼續貫徹「懶」的原則。二是看書不要動口,
不念出聲也不行,
就是不要動口,
要努力在大腦中建立從詞形到語義的直接映射,
如果只能
從詞形到讀音再到語義就太慢了,
嚴重影響閱讀速度。
三是努力做到每句話都從頭到尾只看
一遍,
不許回頭反復看,
這一點比較難,
必須注意力高度集中,經常在記憶中暫存前面半句
的內容和句式才能做到,
但是一旦神功練成就會成倍地提高閱讀速度。
最後一層境界,
學會
skim

就是略讀,
很多優秀的作者在組織材料時會給讀者一些建議,
比如這一段是擴展的高
級話題,和主線的相關度較低,
可以先
skim
到後面,注意不是讓你
skip
到後面,這一段還
是要讀的,
但是不必逐字句地讀,
而是抓主旨,
大概講了個什麼概念
(有一些下定義的句式)

有哪些要點
(有數字編號或
bullet
列表項)

適用於哪些場合有哪些注意事項
(有
caveat

gotcha

noteworthy
這種字眼),後面可能還會碰到這個概念,雖然你沒有仔細看這是個
什麼東西,
但大體上也知道了,
這樣就能不影響後面的閱讀,
這不僅需要高度集中的注意力、
熟練的語言能力,
而且要有足夠的背景知識去猜測性地理解。
但是語言能力還是最重要的因
素,我和幾個同學交流過,他們也能熟練地看英文書,但是需要
skim
查一個東西時就覺得
還是不如中文書查得快。
skim
的技能在查閱手冊時尤其重要,沒有人會像看入門書一樣把
上千頁的手冊從頭到尾看一遍,
都是用到哪兒就查哪兒。
總之,
鍛煉各種閱讀習慣就為了一
個目的:如何在最短的時間內,
在保證正確性的前提下,
獲取盡可能多的知識。程序員的學

習時間都是非常寶貴的。

以上本著「夠用就好」的原則,
多次提到用懶辦法,
但是學技術學英語這兩件事不能懶,

在堅持。
要養成良好的閱讀習慣也有很多東西需要堅持,
其中最根本的是持續高度集中注意
力,充分調動記憶能力、推理能力、猜測能力,就像考試做閱讀題一樣看每一段話。最根本
也是最重要的,
「有英文原版就不看中文版」這個原則一定要堅持。
一開始看英文書可能會
很慢,
但只要一直堅持就會慢慢達到原來看中文書的速度,
再堅持下去就會比中文書看得更
有效率,因為避免了很多歧義和術語翻譯的問題。
有人會說,
項目緊任務急,看英文資料太
慢,
這次就先用中文盡快解決工作中的問題吧,
等以後有時間了再看英文書學習。
可是什麼
時候才會有時間呢?工作總是一個接一個的,
老闆怎麼會付了工資讓你閑著呢?如果你有這
樣的困難,
我的建議是乾脆辭職,學好了英文再去工作。
你只要想想,
你的同行們在外企全
英文的環境下工作,
英文和技術每天都在突飛猛進,
而你還在用效率極其低下的方式學習和
工作,
你和別人的差距不是越來越大了嗎?另一方面,
現在的在校學生從小學就開始抓英語,
基礎都很好,
很多高校也逐漸重視引進原版教材,
開設很多英文授課的專業課。
你再不奮起
直追,就不覺得以後的職業道路充滿危機嗎?

最後說說寫作。
剛開始練習時不要怕寫錯,
能表達清楚自己的意思即可。
我看過很多源代碼
和文檔中的英文,一看就是中國人寫的,謂語動詞不分單復數,名詞復數不加
s
,處處可見
中國式英語,
但是絲毫不影響我對這些編程大牛的景仰,
因為其中的思想我看懂了,
並且我
認為很強大。我有一個朋友,中學畢業就出來混的,由於工作的性質總要跟老外打交道,他
從來不懼和老外交流,
雖然連一個囫圇的句子都說不出來,
但總是能用中學學的那點單詞讓
老外明白他的意思,
這一點我就非常佩服。
總之就是說,
不要因為不知道怎麼寫是對的就不
敢動筆寫,
只要敢交流,
並且別人能懂你的意思,
就是很有效的交流。
而且隨著閱讀量的增
加,自然能寫出一手好英文,前面講過了,創作總是從模仿開始的。不怕出錯才能有一個好
的開始,
才能逐步練習提高,
而練習的最終目的當然還是希望寫好,
不僅字句通順無語法錯
誤,還能適當修辭。

3. 那個RFC歷史任務區域的地圖在哪個網上

TCP不是業務,TCP是一種傳輸控制協議。
如果出現該項扣流量,是屬於操作上出的問題,應該是系統內置的某個應用指向了某些數據流產生的。
TCP(Transmission Control Protocol 傳輸控制協議)是一種面向連接的、可靠的、基於位元組流的傳輸層通信協議,由IETF的RFC 793定義。TCP層是位於IP層之上,應用層之下的中間層。不同主機的應用層之間經常需要可靠的、像管道一樣的連接,但是IP層不提供這樣的流機制,而是提供不可靠的包交換。

4. 請問 OSPF特殊區域中的Stub、Totally Stub、NSSA、Totally NSSA 的區別 特性 作用!

OSPF簡介
4.1.1 ospf概述

開放最短路徑優先協議ospf(open shortest path first)是ietf組織開發的一個基於鏈路狀態的內部網關協議。目前使用的是版本2(rfc2328),其特性如下:

適應范圍――支持各種規模的網路,最多可支持幾百台路由器。

快速收斂――在網路的拓撲結構發生變化後立即發送更新報文,使這一變化在自治系統中同步。

無自環――由於ospf根據收集到的鏈路狀態用最短路徑樹演算法計算路由,從演算法本身保證了不會生成自環路由。

區域劃分――允許自治系統的網路被劃分成區域來管理,區域間傳送的路由信息被進一步抽象,從而減少了佔用的網路帶寬。

等價路由――支持到同一目的地址的多條等價路由。

路由分級――使用4類不同的路由,按優先順序來說分別是:區域內路由、區域間路由、第一類外部路由、第二類外部路由。

支持驗證――支持基於介面的報文驗證以保證路由計算的安全性。

組播發送――協議報文支持以組播形式發送。

4.1.2 ospf協議基本原理

在不考慮區域劃分的情況下,ospf協議的路由計算過程可簡單描述如下:

每個支持ospf協議的路由器都維護著一份描述整個自治系統拓撲結構的鏈路狀態資料庫lsdb(link state database)。每台路由器根據自己周圍的網路拓撲結構生成鏈路狀態廣播lsa(link state advertisement),通過相互之間發送協議報文將lsa發送給網路中其它路由器。這樣每台路由器都收到了其它路由器的lsa,所有的lsa放在一起便組成了鏈路狀態資料庫。

lsa是對路由器周圍網路拓撲結構的描述,lsdb則是對整個網路的拓撲結構的描述。路由器很容易將lsdb轉換成一張帶權的有向圖,這張圖便是對整個網路拓撲結構的真實反映。顯然,各個路由器得到的是一張完全相同的圖。

每台路由器都使用spf演算法計算出一棵以自己為根的最短路徑樹,這棵樹給出了到自治系統中各節點的路由,外部路由信息為葉子節點,外部路由可由廣播它的路由器進行標記以記錄關於自治系統的額外信息。顯然,各個路由器各自得到的路由表是不同的。

此外,為使每台路由器能將本地狀態信息(如可用介面信息、可達鄰居信息等)廣播到整個自治系統中,在路由器之間要建立多個鄰接關系,這使得任何一台路由器的路由變化都會導致多次傳遞,既沒有必要,也浪費了寶貴的帶寬資源。為解決這一問題,ospf協議定義了「指定路由器」dr(designated router)與「備份指定路由器」bdr(backup designated router),關於dr與bdr詳細機制,請參見4.1.4 3. dr和bdr一節。

ospf協議支持基於介面的報文驗證以保證路由計算的安全性;並使用ip多播方式發送和接收報文(224.0.0.5和224.0.0.6)。

4.1.3 ospf的基本概念

1. 路由器id號

一台路由器如果要運行ospf協議,必須存在router id。router id可以手工配置,如果沒有配置router id,系統會從介面的ip地址中自動選擇一個作為router id。其選擇順序是:如果配置了loopback介面地址,則選擇最後配置的ip地址作為router id,如果沒有配置loopback介面地址,則選擇其他介面中最先配置的ip地址作為router id。

2. dr和bdr

指定路由器dr(designated router)

在多路訪問網路中,如果路由器之間兩兩建立鄰接關系,會導致在路由交換時同一個lsa在網路內部被多次重復傳遞,浪費了寶貴的帶寬資源。為了解決這一問題,ospf協議規定,在多路訪問網路中必須選舉dr,網路中的路由器只和dr(以及後面提到的bdr)建立鄰接關系並交換路由,兩台非dr和bdr路由器之間不建立鄰接關系,也不交換路由信息。

哪一台路由器會成為本網段內的dr並不是人為指定的,而是由本網段中所有的路由器共同選舉出來的。

備份指定路由器bdr(backup designated router)

如果dr由於某種故障而失效,這時必須重新選舉dr,並與之同步。這需要較長的時間,在這段時間內,路由計算是不正確的。為了能夠縮短這個過程,ospf提出了bdr的概念。bdr實際上是對dr的一個備份,在選舉dr的同時也選舉出bdr,bdr也和本網段內的所有路由器建立鄰接關系並交換路由信息。當dr失效後,bdr會立即成為dr。

3. 區域(area)

隨著網路規模日益擴大,當一個巨型網路中的路由器都運行ospf路由協議時,路由器數量的增多會導致lsdb非常龐大,佔用大量的存儲空間,並使得運行spf演算法的復雜度增加,導致cpu負擔很重;並且,網路規模增大之後,拓撲結構發生變化的概率也增大,網路會經常處於「動盪」之中,造成網路中會有大量的ospf協議報文在傳遞,降低了網路的帶寬利用率。而且每一次變化都會導致網路中所有的路由器重新進行路由計算。

ospf協議通過將自治系統劃分成不同的區域(area)來解決上述問題。區域是在邏輯上將路由器劃分為不同的組。區域的邊界是路由器,這樣會有一些路由器屬於不同的區域,連接骨幹區域和非骨幹區域的路由器稱作區域邊界路由器――abr,abr與骨幹區域之間既可以是物理連接,也可以是邏輯上的連接。

ospf劃分區域後,可以減少網路中lsa的數量,ospf的擴展性也得以增強。對於位於as邊緣的一些非骨幹區域,為了更多的縮減其路由表規模和降低lsa的數量,可以將它們配置為stub區域。

stub區域不能引入外部路由,為此又產生了nssa區域的概念。nssa區域中允許type7 lsa的傳播。type7 lsa由nssa區域的asbr產生,當它到達nssa的abr時,就會轉換成as-external lsa,並通告到其他區域。

4. 骨幹區域和虛連接

骨幹區域(backbone area)

ospf劃分區域之後,並非所有的區域都是平等的關系。其中有一個區域是與眾不同的,它的區域號(area id)是0,通常被稱為骨幹區域。

虛連接(virtual link)

由於所有區域都必須與骨幹區域連通,特別引入了虛連接的概念,使那些物理上和骨幹區域分離的區域仍可在邏輯上保持和骨幹區域的連通性。

5. 路由聚合

as被劃分成不同的區域,每一個區域通過ospf邊界路由器(abr)相連,區域間可以通過路由聚合來減少路由信息,減小路由表的規模,提高路由器的運算速度。

abr在計算出一個區域的區域內路由之後,根據聚合相關配置,將其中多條ospf路由聚合成一條發送到區域之外。

例如,圖4-1中,area 19內有三條區域內路由19.1.1.0/24,19.1.2.0/24,19.1.3.0/24,如果此時配置了路由聚合,將三條路由聚合成一條19.1.0.0/16,在rta上就只生成一條描述聚合後路由的lsa。

4.1.4 ospf的網路類型

1. ospf的4種網路類型

ospf根據鏈路層協議類型將網路分為下列四種類型:

廣播(broadcast)類型:當鏈路層協議是ethernet、fddi時,ospf預設認為網路類型是broadcast。在該類型的網路中,通常以組播形式(224.0.0.5和224.0.0.6)發送協議報文。

nbma(non-broadcast multi-access,非廣播多點可達網路)類型:當鏈路層協議是幀中繼、atm或x.25時,ospf預設認為網路類型是nbma。在該類型的網路中,以單播形式發送協議報文。

點到多點p2mp(point-to-multipoint)類型:沒有一種鏈路層協議會被預設的認為是p2mp類型。點到多點必須是由其他的網路類型強制更改的。常用做法是將nbma改為點到多點的網路。在該類型的網路中,以組播形式(224.0.0.5)發送協議報文。

點到點p2p(point-to-point)類型:當鏈路層協議是ppp、hdlc時,ospf預設認為網路類型是p2p。在該類型的網路中,以組播形式(224.0.0.5)發送協議報文。

2. nbma網路的配置原則

nbma網路是指非廣播、多點可達的網路,比較典型的有atm和幀中繼網路。

對於介面類型為nbma的網路需要進行一些特殊的配置。由於無法通過廣播hello報文的形式發現相鄰路由器,必須手工為該介面指定相鄰路由器的ip地址,以及該相鄰路由器是否有dr選舉權等。

nbma網路必須是全連通的,即網路中任意兩台路由器之間都必須有一條虛電路直接可達。如果部分路由器之間沒有直接可達的鏈路時,應將介面配置成p2mp方式。如果路由器在nbma網路中只有一個對端,也可將介面類型改為p2p方式。

nbma與p2mp網路之間的區別:

nbma是指那些全連通的、非廣播、多點可達網路。而點到多點的網路,則並不需要一定是全連通的。

在nbma上需要選舉dr與bdr,而在點到多點網路中沒有dr與bdr。

nbma是一種預設的網路類型,點到多點必須是由其它的網路強制更改的。最常見的做法是將nbma改為點到多點的網路。

nbma用單播發送報文,需要手工配置鄰居。點到多點採用組播方式發送報文。

3. dr和bdr

在廣播網和nbma網路中,任意兩台路由器之間都要傳遞路由信息。如果網路中有n台路由器,則需要建立nx(n-1)/2個鄰接關系。這使得任何一台路由器的路由變化都會導致多次傳遞,浪費了帶寬資源。為解決這一問題,ospf協議定義了指定路由器dr(designated router),所有路由器都只將信息發送給dr,由dr將網路鏈路狀態發送出去。

如果dr由於某種故障而失效,則網路中的路由器必須重新選舉dr,再與新的dr同步。這需要較長的時間,在這段時間內,路由的計算是不正確的。為了能夠縮短這個過程,ospf提出了bdr(backup designated router)的概念。

bdr實際上是對dr的一個備份,在選舉dr的同時也選舉出bdr,bdr也和本網段內的所有路由器建立鄰接關系並交換路由信息。當dr失效後,bdr會立即成為dr。由於不需要重新選舉,並且鄰接關系事先已建立,所以這個過程是非常短暫的。當然這時還需要再重新選舉出一個新的bdr,雖然一樣需要較長的時間,但並不會影響路由的計算。

除dr和bdr之外的路由器(稱為dr other)之間將不再建立鄰接關系,也不再交換任何路由信息。這樣就減少了廣播網和nbma網路上各路由器之間鄰接關系的數量。

如圖4-2所示,用實線代表乙太網物理連接,虛線代表建立的鄰接關系。可以看到,採用dr/bdr機制後,5台路由器之間只需要建立7個鄰接關系就可以了。

4. dr/bdr的選舉過程

dr和bdr不是人為指定的,而是由本網段中所有的路由器共同選舉出來的。路由器介面的dr優先順序決定了該介面在選舉dr、bdr時所具有的資格。本網段內dr優先順序大於0的路由器都可作為「候選人」。

選舉中使用的「選票」就是hello報文。每台路由器將自己選出的dr寫入hello報文中,發給網段上的每台運行ospf協議的路由器。當處於同一網段的兩台路由器同時宣布自己是dr時,dr優先順序高者勝出。如果優先順序相等,則router id大者勝出。如果一台路由器的優先順序為0,則它不會被選舉為dr或bdr。

只有在廣播或nbma類型介面才會選舉dr,在點到點或點到多點類型的介面上不需要選舉dr。

dr是指某個網段中概念,是針對路由器的介面而言的。某台路由器在一個介面上可能是dr,在另一個介面上有可能是bdr,或者是dr other。

若dr、bdr已經選擇完畢,當一台新路由器加入後,即使它的dr優先順序值最大,也不會立即成為該網段中的dr。

dr並不一定就是dr優先順序最大的路由器;同理,bdr也並不一定就是dr優先順序第二大的路由器。

4.1.5 ospf的協議報文

ospf有五種報文類型:

hello報文(hello packet):

最常用的一種報文,周期性的發送給本路由器的鄰居。內容包括一些定時器的數值、dr、bdr(backup designated router)以及自己已知的鄰居。

dd報文(database description packet):

兩台路由器進行資料庫同步時,用dd報文來描述自己的lsdb,內容包括lsdb中每一條lsa的摘要(摘要是指lsa的head,通過該head可以唯一標識一條lsa)。這樣做是為了減少路由器之間傳遞信息的量,因為lsa的head只佔一條lsa的整個數據量的一小部分,根據head,對端路由器就可以判斷出是否已有這條lsa。

lsr報文(link state request packet):

兩台路由器互相交換過dd報文之後,知道對端的路由器有哪些lsa是本地的lsdb所缺少的,這時需要發送lsr報文向對方請求所需的lsa。內容包括所需要的lsa的摘要。

lsu報文(link state update packet):

用來向對端路由器發送所需要的lsa,內容是多條lsa(全部內容)的集合。

lsack報文(link state acknowledgment packet)

用來對接收到的lsu報文進行確認。內容是需要確認的lsa的head(一個報文可對多個lsa進行確認)。

4.1.6 ospf的lsa類型

1. 五類基本的lsa

根據前面幾節的介紹可以了解,鏈路狀態廣播報文lsa是ospf協議計算和維護路由信息的主要來源。在rfc2328中定義了五類lsa,描述如下:

router-lsas:第一類lsa(type-1),由每個路由器生成,描述本路由器的鏈路狀態和花費,只在路由器所處區域內傳播。

network-lsas:第二類lsa(type-2),由廣播網路和nbma網路的dr生成,描述本網段的鏈路狀態,只在dr所處區域內傳播。

summary-lsas:包含第三類lsa和第四類lsa(type-3,type-4),由區域邊界路由器abr生成,在與該lsa相關的區域內傳播。每一條summary-lsa描述一條到達本自治系統的、其它區域的某一目的地的路由(即區域間路由:inter-area route)。type-3 summary-lsas描述去往網路的路由(目的地為網段),type-4 summary-lsas描述去往自治系統邊界路由器asbr的路由。

as-external-lsas:第五類lsa(type-5),也可以寫成ase lsa,由自治系統邊界路由器asbr生成,描述到達其它as的路由,傳播到整個as(stub區域除外)。as的預設路由也可以用as-external-lsas來描述。

2. 第七類lsa

在rfc1587(ospf nssa option)中增加了一類新的lsa:type-7 lsas。

根據rfc1587的描述,type-7 lsas與type-5 lsas主要有以下兩點區別:

type-7 lsas在nssa區域(not-so-stubby area)內產生和發布;但nssa區域內不會產生或發布type-5 lsas。

type-7 lsas只能在一個nssa內發布,當到達區域邊界路由器abr時,abr可以選擇將type-7 lsas中的部分路由信息轉換成type-5 lsas發布,type-7 lsas不直接發布到其它區域或骨幹區域。

4.1.7 h3c s7500系列乙太網交換機支持的ospf特性

在h3c s7500系列乙太網交換機的實現中,支持以下ospf特性:

支持stub區域:定義了stub區域以節省該區域內路由器接收ase路由時的開銷。

支持nssa區域:定義了nssa區域,以克服stub區域對於拓撲結構的限制。nssa是not-so-stubby area的簡寫。

支持ospf多進程(multi-process),可以在一台路由器上運行多個ospf進程。

可以和其它動態路由協議共享所發現的路由信息:在現階段,支持將rip等動態路由協議和靜態路由作為ospf的外部路由引入到路由器所屬的自治系統中去,或將ospf自身發現的路由信息發布到其它路由協議中去。

授權驗證字:ospf對同一區域內的相鄰路由器之間可以選擇明文串驗證字和md5加密驗證字兩種報文合法性驗證手段。

路由器介面參數的靈活配置:在路由器的介面上,可以配置ospf的參數包括:輸出花費、hello報文發送間隔、重傳間隔、介面傳輸時延、路由優先順序、相鄰路由器「失效」時間、報文驗證方式和報文驗證字等。

虛連接:支持創建和配置虛連接。

豐富的調試信息:提供了豐富的調試信息幫助用戶診斷故障。

5. 求所有數字貨幣的符號。如比特幣的符號BTC.謝謝

進入數字貨幣領域,只需要記住排名前一百市值的數字貨幣或者運營團隊比較靠譜幣種名稱就可以了,像ETH、XRP、EOS、LRC、BTM、LRN、MANA、NAS、HT等。

6. 啥是分片技術

寫在文前:視頻版本和文字版本略有不同,想要看我深情並茂演繹,請看視頻版本 (喵懂區塊鏈22期|分片(Sharding):以太坊太慢,「盤」他!),思維邏輯怪,請看文案加長版。

最近以太坊由於君士坦丁堡升級(Constantinople)而出現了壓倒性的積極走勢,而以太坊的升級之路則猶如升級打怪一般,落入了rabbithole,誰也不知道這洞有多深。既然是「路漫漫其修遠兮」,則把腳下的每一步走好走准,則成了至關重要的點。攻破這一難點之後,以太坊的下一技術難點---Sharding分片,則又被擺到了檯面上。本期《喵懂區塊鏈》會帶大家走進讓以太坊快起來的法寶--- Sharding分片。

什麼是sharding分片?

分片技術其實並不是什麼新概念,起初是針對大型中心資料庫提出的優化方案,具體來說就是將大型資料庫中的數據劃按照某種規則分成很多數據分片(shard),再將這些數據分片分別存放在不同的伺服器中,以減小每個伺服器的數據訪問壓力,從而提高整個資料庫系統的性能。

我們舉一個通俗的小例子:

比如我們平時經常使用的美團,滴滴打車等軟體,就可以按照「城市」來進行分片,由於不同城市的數據不需要互通,就可以將不同城市的數據存放在不同資料庫中,這樣既可以把資料庫伺服器部署到離對應城市最近的節點上,還可以提高訪問速度,何樂而不為呢?!

從上面的例子中,我大家應該對分片的概念有了初步了解,那麼對應到區塊鏈場景中來說,分片又是怎麼樣的呢?

以以太坊分片為例,在原有的單鏈系統中,公鏈整體的性能取決於單個節點的性能,進行分片之後,每個節點只需要承當全網部分工作,各個分片並行工作,按照Vitalik的話來說,each shard is like a separate galaxy每個分片都像是獨立的小宇宙,這樣效率自然噌噌噌提升!原本以太坊鏈全網TPS約為20,現在若增加到100個分片,那麼全網TPS可以提升至2000,同理,全網容量也將提升至原來的100倍。

「每個節點只需要承擔全網部分工作」,這就會引出幾大問題,1.怎麼確定這個節點是負責哪個分片的工作?2.哪些交易應該歸類到哪些分片當中去?3.每個節點是否只需要儲存自己所在分片的交易信息(賬本)?

根據以上問題的實現與否,我們可以將分片依次分為三種類型:網路分片,交易分片,狀態分片。

網路分片:如何將全網節點劃分到不同分片當中去。

交易分片:如何將全網交易劃分到不同分片當中去。

狀態分片:如何讓各個節點只維護各自分片內的賬本,但又不影響整個系統的安全性。

主鏈和分片鏈的區別和聯系?

分片的類型我們已經明白了,那麼主鏈(Main chain)和分片鏈(shard chain)有什麼不同呢?

向左轉|向右轉

以太坊分片的實現是一個漫長的過程,就連Vitalik自己也說將會分階段來逐步實現,分片到底能不能從理論走向實踐,我們還是小小期待一下吧。

7. 32位md5

MD5(111111,32) =
MD5(111111,16) = 965eb72c92a549dd

受之以魚,不如受之以漁。以下是兩個查詢md5的網站
www.cmd5.com
www.xmd5.com
MD5的全稱是Message-Digest Algorithm 5(信息-摘要演算法),在90年代初由MIT Laboratory for Computer Science和RSA Data Security Inc的Ronald L. Rivest開發出來,經MD2、MD3和MD4發展而來。它的作用是讓大容量信息在用數字簽名軟體簽署私人密匙前被"壓縮"成一種保密的格式(就是把一個任意長度的位元組串變換成一定長的大整數)。不管是MD2、MD4還是MD5,它們都需要獲得一個隨機長度的信息並產生一個128位的信息摘要。雖然這些演算法的結構或多或少有些相似,但MD2的設計與MD4和MD5完全不同,那是因為MD2是為8位機器做過設計優化的,而MD4和MD5卻是面向32位的電腦。這三個演算法的描述和C語言源代碼在Internet RFCs 1321中有詳細的描述(http://www.ietf.org/rfc/rfc1321.txtmmkey.com),這是一份最權威的文檔,由Ronald L. Rivest在1992年8月向IEFT提交。

Rivest在1989年開發出MD2演算法。在這個演算法中,首先對信息進行數據補位,使信息的位元組長度是16的倍數。然後,以一個16位的檢驗和追加到信息末尾。並且根據這個新產生的信息計算出散列值。後來,Rogier和Chauvaud發現如果忽略了檢驗和將產生MD2沖突。MD2演算法的加密後結果是唯一的--既沒有重復。

為了加強演算法的安全性,Rivest在1990年又開發出MD4演算法。MD4演算法同樣需要填補信息以確保信息的位元組長度加上448後能被512整除(信息位元組長度mod 512 = 448)。然後,一個以64位二進製表示的信息的最初長度被添加進來。信息被處理成512位Damg?rd/Merkle迭代結構的區塊,而且每個區塊要通過三個不同步驟的處理。Den Boer和Bosselaers以及其他人很快的發現了攻擊MD4版本中第一步和第三步的漏洞。Dobbertin向大家演示了如何利用一部普通的個人電腦在幾分鍾內找到MD4完整版本中的沖突(這個沖突實際上是一種漏洞,它將導致對不同的內容進行加密卻可能得到相同的加密後結果)。毫無疑問,MD4就此被淘汰掉了。

盡管MD4演算法在安全上有個這么大的漏洞,但它對在其後才被開發出來的好幾種信息安全加密演算法的出現卻有著不可忽視的引導作用。除了MD5以外,其中比較有名的還有SHA-1、RIPE-MD以及HAVAL等。

一年以後,即1991年,Rivest開發出技術上更為趨近成熟的MD5演算法。它在MD4的基礎上增加了"安全-帶子"(Safety-Belts)的概念。雖然MD5比MD4稍微慢一些,但卻更為安全。這個演算法很明顯的由四個和MD4設計有少許不同的步驟組成。在MD5演算法中,信息-摘要的大小和填充的必要條件與MD4完全相同。Den Boer和Bosselaers曾發現MD5演算法中的假沖突(Pseudo-Collisions),但除此之外就沒有其他被發現的加密後結果了。

Van Oorschot和Wiener曾經考慮過一個在散列中暴力搜尋沖突的函數(Brute-Force Hash Function),而且他們猜測一個被設計專門用來搜索MD5沖突的機器(這台機器在1994年的製造成本大約是一百萬美元)可以平均每24天就找到一個沖突。但單從1991年到2001年這10年間,竟沒有出現替代MD5演算法的MD6或被叫做其他什麼名字的新演算法這一點,我們就可以看出這個瑕疵並沒有太多的影響MD5的安全性。上面所有這些都不足以成為MD5的在實際應用中的問題。並且,由於MD5演算法的使用不需要支付任何版權費用的,所以在一般的情況下(非絕密應用領域。但即便是應用在絕密領域內,MD5也不失為一種非常優秀的中間技術),MD5怎麼都應該算得上是非常安全的了。

演算法的應用

MD5的典型應用是對一段信息(Message)產生信息摘要(Message-Digest),以防止被篡改。比如,在UNIX下有很多軟體在下載的時候都有一個文件名相同,文件擴展名為.md5的文件,在這個文件中通常只有一行文本,大致結構如:

MD5 (tanajiya.tar.gz) =

這就是tanajiya.tar.gz文件的數字簽名。MD5將整個文件當作一個大文本信息,通過其不可逆的字元串變換演算法,產生了這個唯一的MD5信息摘要。如果在以後傳播這個文件的過程中,無論文件的內容發生了任何形式的改變(包括人為修改或者下載過程中線路不穩定引起的傳輸錯誤等),只要你對這個文件重新計算MD5時就會發現信息摘要不相同,由此可以確定你得到的只是一個不正確的文件。如果再有一個第三方的認證機構,用MD5還可以防止文件作者的"抵賴",這就是所謂的數字簽名應用。

MD5還廣泛用於加密和解密技術上。比如在UNIX系統中用戶的密碼就是以MD5(或其它類似的演算法)經加密後存儲在文件系統中。當用戶登錄的時候,系統把用戶輸入的密碼計算成MD5值,然後再去和保存在文件系統中的MD5值進行比較,進而確定輸入的密碼是否正確。通過這樣的步驟,系統在並不知道用戶密碼的明碼的情況下就可以確定用戶登錄系統的合法性。這不但可以避免用戶的密碼被具有系統管理員許可權的用戶知道,而且還在一定程度上增加了密碼被破解的難度。

正是因為這個原因,現在被黑客使用最多的一種破譯密碼的方法就是一種被稱為"跑字典"的方法。有兩種方法得到字典,一種是日常搜集的用做密碼的字元串表,另一種是用排列組合方法生成的,先用MD5程序計算出這些字典項的MD5值,然後再用目標的MD5值在這個字典中檢索。我們假設密碼的最大長度為8位位元組(8 Bytes),同時密碼只能是字母和數字,共26+26+10=62個字元,排列組合出的字典的項數則是P(62,1)+P(62,2)….+P(62,8),那也已經是一個很天文的數字了,存儲這個字典就需要TB級的磁碟陣列,而且這種方法還有一個前提,就是能獲得目標賬戶的密碼MD5值的情況下才可以。這種加密技術被廣泛的應用於UNIX系統中,這也是為什麼UNIX系統比一般操作系統更為堅固一個重要原因。

演算法描述

對MD5演算法簡要的敘述可以為:MD5以512位分組來處理輸入的信息,且每一分組又被劃分為16個32位子分組,經過了一系列的處理後,演算法的輸出由四個32位分組組成,將這四個32位分組級聯後將生成一個128位散列值。

在MD5演算法中,首先需要對信息進行填充,使其位元組長度對512求余的結果等於448。因此,信息的位元組長度(Bits Length)將被擴展至N*512+448,即N*64+56個位元組(Bytes),N為一個正整數。填充的方法如下,在信息的後面填充一個1和無數個0,直到滿足上面的條件時才停止用0對信息的填充。然後,在在這個結果後面附加一個以64位二進製表示的填充前信息長度。經過這兩步的處理,現在的信息位元組長度=N*512+448+64=(N+1)*512,即長度恰好是512的整數倍。這樣做的原因是為滿足後面處理中對信息長度的要求。

MD5中有四個32位被稱作鏈接變數(Chaining Variable)的整數參數,他們分別為:A=0x01234567,B=0x89abcdef,C=0xfedcba98,D=0x76543210。

當設置好這四個鏈接變數後,就開始進入演算法的四輪循環運算。循環的次數是信息中512位信息分組的數目。

將上面四個鏈接變數復制到另外四個變數中:A到a,B到b,C到c,D到d。

主循環有四輪(MD4隻有三輪),每輪循環都很相似。第一輪進行16次操作。每次操作對a、b、c和d中的其中三個作一次非線性函數運算,然後將所得結果加上第四個變數,文本的一個子分組和一個常數。再將所得結果向右環移一個不定的數,並加上a、b、c或d中之一。最後用該結果取代a、b、c或d中之一。
以一下是每次操作中用到的四個非線性函數(每輪一個)。

F(X,Y,Z) =(X&Y)|((~X)&Z)
G(X,Y,Z) =(X&Z)|(Y&(~Z))
H(X,Y,Z) =X^Y^Z
I(X,Y,Z)=Y^(X|(~Z))
(&是與,|是或,~是非,^是異或)

這四個函數的說明:如果X、Y和Z的對應位是獨立和均勻的,那麼結果的每一位也應是獨立和均勻的。
F是一個逐位運算的函數。即,如果X,那麼Y,否則Z。函數H是逐位奇偶操作符。

假設Mj表示消息的第j個子分組(從0到15),<<
FF(a,b,c,d,Mj,s,ti)表示a=b+((a+(F(b,c,d)+Mj+ti)<< GG(a,b,c,d,Mj,s,ti)表示a=b+((a+(G(b,c,d)+Mj+ti)<< HH(a,b,c,d,Mj,s,ti)表示a=b+((a+(H(b,c,d)+Mj+ti)<< II(a,b,c,d,Mj,s,ti)表示a=b+((a+(I(b,c,d)+Mj+ti)<<
這四輪(64步)是:

第一輪

FF(a,b,c,d,M0,7,0xd76aa478)
FF(d,a,b,c,M1,12,0xe8c7b756)
FF(c,d,a,b,M2,17,0x242070db)

FF(b,c,d,a,M3,22,0xc1bdceee)
FF(a,b,c,d,M4,7,0xf57c0faf)
FF(d,a,b,c,M5,12,0x4787c62a)
FF(c,d,a,b,M6,17,0xa8304613)
FF(b,c,d,a,M7,22,0xfd469501)
FF(a,b,c,d,M8,7,0x698098d8)
FF(d,a,b,c,M9,12,0x8b44f7af)
FF(c,d,a,b,M10,17,0xffff5bb1)
FF(b,c,d,a,M11,22,0x895cd7be)
FF(a,b,c,d,M12,7,0x6b901122)
FF(d,a,b,c,M13,12,0xfd987193)
FF(c,d,a,b,M14,17,0xa679438e)
FF(b,c,d,a,M15,22,0x49b40821)

第二輪

GG(a,b,c,d,M1,5,0xf61e2562)
GG(d,a,b,c,M6,9,0xc040b340)
GG(c,d,a,b,M11,14,0x265e5a51)
GG(b,c,d,a,M0,20,0xe9b6c7aa)
GG(a,b,c,d,M5,5,0xd62f105d)
GG(d,a,b,c,M10,9,0x02441453)
GG(c,d,a,b,M15,14,0xd8a1e681)
GG(b,c,d,a,M4,20,0xe7d3fbc8)
GG(a,b,c,d,M9,5,0x21e1cde6)
GG(d,a,b,c,M14,9,0xc33707d6)
GG(c,d,a,b,M3,14,0xf4d50d87)
GG(b,c,d,a,M8,20,0x455a14ed)
GG(a,b,c,d,M13,5,0xa9e3e905)
GG(d,a,b,c,M2,9,0xfcefa3f8)
GG(c,d,a,b,M7,14,0x676f02d9)
GG(b,c,d,a,M12,20,0x8d2a4c8a)

第三輪

HH(a,b,c,d,M5,4,0xfffa3942)
HH(d,a,b,c,M8,11,0x8771f681)
HH(c,d,a,b,M11,16,0x6d9d6122)
HH(b,c,d,a,M14,23,0xfde5380c)
HH(a,b,c,d,M1,4,0xa4beea44)
HH(d,a,b,c,M4,11,0x4bdecfa9)
HH(c,d,a,b,M7,16,0xf6bb4b60)
HH(b,c,d,a,M10,23,0xbebfbc70)
HH(a,b,c,d,M13,4,0x289b7ec6)
HH(d,a,b,c,M0,11,0xeaa127fa)
HH(c,d,a,b,M3,16,0xd4ef3085)
HH(b,c,d,a,M6,23,0x04881d05)
HH(a,b,c,d,M9,4,0xd9d4d039)
HH(d,a,b,c,M12,11,0xe6db99e5)
HH(c,d,a,b,M15,16,0x1fa27cf8)
HH(b,c,d,a,M2,23,0xc4ac5665)

第四輪

II(a,b,c,d,M0,6,0xf4292244)
II(d,a,b,c,M7,10,0x432aff97)
II(c,d,a,b,M14,15,0xab9423a7)
II(b,c,d,a,M5,21,0xfc93a039)
II(a,b,c,d,M12,6,0x655b59c3)
II(d,a,b,c,M3,10,0x8f0ccc92)
II(c,d,a,b,M10,15,0xffeff47d)
II(b,c,d,a,M1,21,0x85845dd1)
II(a,b,c,d,M8,6,0x6fa87e4f)
II(d,a,b,c,M15,10,0xfe2ce6e0)
II(c,d,a,b,M6,15,0xa3014314)
II(b,c,d,a,M13,21,0x4e0811a1)
II(a,b,c,d,M4,6,0xf7537e82)
II(d,a,b,c,M11,10,0xbd3af235)
II(c,d,a,b,M2,15,0x2ad7d2bb)
II(b,c,d,a,M9,21,0xeb86d391)

常數ti可以如下選擇:

在第i步中,ti是4294967296*abs(sin(i))的整數部分,i的單位是弧度。(4294967296等於2的32次方)
所有這些完成之後,將A、B、C、D分別加上a、b、c、d。然後用下一分組數據繼續運行演算法,最後的輸出是A、B、C和D的級聯。

當你按照我上面所說的方法實現MD5演算法以後,你可以用以下幾個信息對你做出來的程序作一個簡單的測試,看看程序有沒有錯誤。

MD5 ("") =
MD5 ("a") =
MD5 ("abc") =
MD5 ("message digest") =
MD5 ("abcdefghijklmnopqrstuvwxyz") =
MD5 ("") =

MD5 ("
01234567890") =

如果你用上面的信息分別對你做的MD5演算法實例做測試,最後得出的結論和標准答案完全一樣,那我就要在這里象你道一聲祝賀了。要知道,我的程序在第一次編譯成功的時候是沒有得出和上面相同的結果的。

MD5的安全性

MD5相對MD4所作的改進:

1. 增加了第四輪;

2. 每一步均有唯一的加法常數;

3. 為減弱第二輪中函數G的對稱性從(X&Y)|(X&Z)|(Y&Z)變為(X&Z)|(Y&(~Z));

4. 第一步加上了上一步的結果,這將引起更快的雪崩效應;

5. 改變了第二輪和第三輪中訪問消息子分組的次序,使其更不相似;

6. 近似優化了每一輪中的循環左移位移量以實現更快的雪崩效應。各輪的位移量互不相同。

祝你好運!!!

8. 什麼是時間戳,時間戳是幹嘛用的

是由數字簽名技術產生的,簽名的對象主要有簽名時間、簽名參數、原始文件信息等信息。

時間戳的主要作用就是驗證數據是否被篡改,這也是人們創建它的主要目的,它通過一定的技術手段,對某一數據產生的時間進行認證,以此來確定這一數據在產生後是否被篡改過。

故此提供時間戳服務的人必須證明服務中使用的時間源是可信的,這樣才能保證他提供的時間戳服務是安全的。區塊鏈中的時間戳簽名是寫在區塊鏈中某個區域上的。而恰好區塊鏈有一特點就是過去的部分不可能更改也無法修改。所以,區塊鏈中的數據的穩定性和可靠性極高。

(8)區塊鏈rfc擴展閱讀

在當今社會,不論是計算機或是手機,或者其他任何電子設備,都可以通過修改它顯示的時間,「穿越」到過去,或者「穿梭」到未來,我們也可以通過各種軟體來修改圖片或者視頻等等。因此,在網路上,關於時間的信息似乎失去意義,因為幾乎任何人都可以修改它。

不過,在區塊鏈中,時間戳永遠不會撒謊,因為區塊鏈過去的部分是不能以任何方式進行修改的。而且時間戳是區塊鏈區塊包含特定信息的一個過程,它永遠存在。

9. RIP,OSPF等路由協議嚴格意義上講屬哪一層

RIP基於UDP,BGP基於TCP,OSPF和EIGRP基於IP 。這些在TCP/IP協議棧中定義的路由協議用於發現和維護前往目的地的最短路徑。

路由協議(英語:Routing protocol)是一種指定數據包轉送方式的網上協議。Internet網路的主要節點設備是路由器,路由器通過路由表來轉發接收到的數據。轉發策略可以是人工指定的(通過靜態路由、策略路由等方法)。在具有較小規模的網路中,人工指定轉發策略沒有任何問題。

(9)區塊鏈rfc擴展閱讀

常見路由協議

常見的路由協議有RIP、IGRP(Cisco私有協議)、EIGRP(Cisco私有協議)、OSPF、IS-IS、BGP等。

RIP、IGRP、EIGRP、OSPF、IS-IS是內部網關協議(IGP),適用於單個ISP的統一路由協議的運行,一般由一個ISP運營的網路位於一個AS(自治系統)內,有統一的AS number(自治系統號)。

BGP是自治系統間的路由協議,是一種外部網關協議,多用於不同ISP之間交換路由信息,以及大型企業、政府等具有較大規模的私有網路。

RIP

主條目:路由信息協議

RIP很早就被用在Internet上,是最簡單的路由協議。它是「路由信息協議(Route Information Protocol)」的簡寫

主要傳遞路由信息,通過每隔30秒廣播一次路由表,維護相鄰路由器的位置關系,同時根據收到的路由表信息計算自己的路由表信息。RIP是一個距離矢量路由協議,最大跳數為15跳,超過15跳的網路則認為目標網路不可達。

此協議通常用在網路架構較為簡單的小型網路環境。現在分為RIPv1和RIPv2兩個版本,後者支持VLSM技術以及一系列技術上的改進。RIP的收斂速度較慢。

OSPF

主條目:開放式最短路徑優先

OSPF協議是「開放式最短路徑優先(Open Shortest Path First)」的縮寫,屬於鏈路狀態路由協議。OSPF提出了「區域(area)」的概念,每個區域中所有路由器維護著一個相同的鏈路狀態資料庫(LSDB)。

區域又分為骨幹區域(骨幹區域的編號必須為0)和非骨幹區域(非0編號區域),如果一個運行OSPF的網路只存在單一區域,則該區域可以是骨幹區域或者非骨幹區域。如果該網路存在多個區域,那麼必須存在骨幹區域,並且所有非骨幹區域必須和骨幹區域直接相連。

OSPF利用所維護的鏈路狀態資料庫,通過最短路徑優先演算法(SPF演算法)計算得到路由表。OSPF的收斂速度較快。由於其特有的開放性以及良好的擴展性,目前OSPF協議在各種網路中廣泛部署。

IS-IS

主條目:中間系統到中間系統

IS-IS協議是Intermediate system to intermediate system(中間系統到中間系統)的縮寫,屬於鏈路狀態路由協議。

標准IS-IS協議是由國際標准化組織制定的ISO/IEC 10589:2002所定義的,標准IS-IS不適合用於IP網路,因此IETF制定了適用於IP網路的集成化IS-IS協議

和OSPF相同,IS-IS也使用了「區域」的概念,同樣也維護著一份鏈路狀態資料庫,通過最短生成樹演算法(SPF)計算出最佳路徑。IS-IS的收斂速度較快。集成化IS-IS協議是ISP骨幹網上最常用的IGP協議。

IGRP

主條目:內部網關路由協議

IGRP協議是「內部網關路由協議(Interior Gateway Routing Protocol)」的縮寫,由Cisco於二十世紀八十年代獨立開發,屬於Cisco私有協議。

IGRP和RIP一樣,同屬距離矢量路由協議,因此在諸多方面有著相似點,如IGRP也是周期性的廣播路由表,也存在最大跳數(默認為100跳,達到或超過100跳則認為目標網路不可達)。

IGRP最大的特點是使用了混合度量值,同時考慮了鏈路的帶寬、延遲、負載、MTU、可靠性5個方面來計算路由的度量值,而不像其他IGP協議單純的考慮某一個方面來計算度量值。

目前IGRP已經被Cisco獨立開發的EIGRP協議所取代,版本號為12.3及其以上的Cisco IOS(Internetwork Operating System)已經不支持該協議,現在已經罕有運行IGRP協議的網路。

EIGRP

主條目:增強型內部網關路由協議

由於IGRP協議的種種缺陷以及不足,Cisco開發了EIGRP協議(增強型內部網關路由協議)來取代IGRP協議。

EIGRP屬於高級距離矢量路由協議(又稱混合型路由協議),繼承了IGRP的混合度量值,最大特點在於引入了非等價負載均衡技術,並擁有極快的收斂速度。EIGRP協議在Cisco設備網路環境中廣泛部署。

BGP

主條目:邊界網關協議

為了維護各個ISP的獨立利益,標准化組織制定了ISP間的路由協議BGP。BGP是「邊界網關協議(Border Gateway Protocol)」的縮寫,處理各ISP之間的路由傳遞。但是BGP運行在相對核心的地位,需要用戶對網路的結構有相當的了解,否則可能會造成較大損失。

熱點內容
幣圈link簡稱什麼 發布:2025-06-23 00:18:16 瀏覽:857
購買比特幣如何交易 發布:2025-06-23 00:16:44 瀏覽:452
礦難多久比特幣 發布:2025-06-22 23:58:04 瀏覽:825
幣圈加倉解套法 發布:2025-06-22 23:23:50 瀏覽:145
sero礦機算力 發布:2025-06-22 23:09:56 瀏覽:947
一萬可以投資比特幣 發布:2025-06-22 23:08:24 瀏覽:950
去市民中心領病歷卡需要帶什麼 發布:2025-06-22 23:03:30 瀏覽:392
賓士車主去梅奔中心 發布:2025-06-22 22:42:55 瀏覽:980
幣圈交易平台app排名前十名 發布:2025-06-22 22:42:17 瀏覽:299
Eth轉賬幾天沒轉出去怎麼辦 發布:2025-06-22 22:30:04 瀏覽:474