青青草国产成人av片免费/香港三级日本韩国三级专线/国内自拍在钱/天堂国产女人av

回復

灰灰的密碼學筆記(轉載)

樓主: 18059 | 查看: 9910 | 回復: 27

發表于 2012-9-23 20:56:53
我在 密碼吧 看到的 可能對大家有用 所以就發上來了 先發目錄-.-
目錄:
  密碼常識
    字母表順序-數字
    進制轉換密碼
    Mod算法
    倒序
    間隔
    字母頻率
  凱撒密碼(Caesar Shifts, Simple Shift)
  凱撒移位(中文版)
  柵欄密碼(The Rail-Fence Cipher)
  維吉尼亞密碼(Vigenère Cipher)
  Polybius密碼(Polybius Cipher)
  ADFGX/ADFGVX密碼(ADFGX/ADFGVX Cipher)
    ADFGX
    ADFGVX
  乘法密碼(Multiplication Cipher)
  仿射密碼(Affine Shift)
  希爾密碼(Hill Cipher)
    加密
    解密
  Playfair密碼(Playfair Cipher)
  摩斯電碼
  置換密碼(Transposition Cipher)
  替代密碼(Monoalphabetic Substitution)
    字母表數字
    字母表代碼
    反字母表
    隨機亂序字母
    棋盤密碼
    鍵盤密碼
    鍵盤移位
    軟鍵盤密碼
    數字小鍵盤密碼
    手機鍵盤密碼
  數字諧音密碼
  數字記憶編碼
  百度/Google/網頁字符
    百度字符(GB2312)
    Google字符(URI)
    網頁編碼(Unicode)
    Alt+數字小鍵盤
  MD5
----------------接下來是密碼常識----------------
【密碼常識】

字母表順序-數字
  加密的時候,經常要把A~Z這26個字母轉換成數字,最常見的一種方法就是取字母表中的數字序號。A代表1,B代表2,C代表3...

  字母 A B C D E F G H I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z
  數字 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26

進制轉換密碼
  例如二進制:1110 10101 1101 10 101 10010 1111 1110 101
  轉為十進制:14 21 13 2 5 18 15 14 5
  對應字母表:number

Mod算法
  我們可以對字母序號進行數學運算,然后把所得的結果作為密文。當運算結果大于26或小于1的時候,我們希望把這個數值轉為1~26的范圍,那么取這個數除以26的余數即可。

  Mod就是求余數的運算符,有時也用“%”表示。例如 29 Mod 26 = 3,或寫成 29 % 26 = 3,意思是29除以26的余數是3。

倒序
  加密時為經常要對字符進行倒序處理。如果讓你按abcdef...的順序背出字母表的每個字母會很容易,但是如果是zyxwvu...的順序那就很難背出來了。一個很熟悉的單詞,如果按相反的順序拼寫,可能就會感到很陌生。

  例如“love”字母倒過來拼就是“evol”。

  具體加密時倒序有很多種方案,需要靈活運用。例如:

  每個單詞的倒序:siht si a tset - this is a test
  整句的倒序:tset a si siht - this is a test
  數字的倒序:02 50 91 02 - 20 05 19 20(test)

間隔
  單詞之間的間隔一般使用空格。在加密時常常要去掉空格,但有時某些字母或數字來替代空格也不失為一種好的加密方案。錯誤空格位置也會起到很強的誤導作用。

  例如:t hi sis at est - this is a test

字母頻率
  頻率分析法可以有效的破解單字母替換密碼。

  關于詞頻問題的密碼,我在這里提供英文字母的出現頻率給大家,其中數字全部是出現的百分比:
  a  8.2    b  1.5    c  2.8    d  4.3
  e 12.7    f  2.2    g  2.0    h  6.1
  i  7.0    j  0.2    k  0.8    l  4.0
  m  2.4    n  6.7    o  7.5    p  1.9
  q  0.1    r  6.0    s  6.3    t  9.1
  u  2.8    v  1.0    w  2.4    x  0.2
  y  2.0    z  0.1

  詞頻法其實就是計算各個字母在文章中的出現頻率,然后大概猜測出明碼表,最后驗證自己的推算是否正確。這種方法由于要統計字母出現頻率,需要花費時間較長。參考《跳舞的小人》和《金甲蟲》。
1人評分
+20
  • 7: 好資料,感謝分享

13

63

分享

| 樓主| 發表于 2012-9-23 20:57:24
【凱撒密碼(Caesar Shifts, Simple Shift)】

  也稱凱撒移位,是最簡單的加密方法之一,相傳是古羅馬愷撒大帝用來保護重要軍情的加密系統,它是一種替代密碼。

  加密公式:密文 = (明文 + 位移數) Mod 26
  解密公式:明文 = (密文 - 位移數) Mod 26

  以《數字城堡》中的一組密碼為例:

  HL FKZC VD LDS

  只需把每個字母都按字母表中的順序依次后移一個字母即可——A變成B,B就成了C,依此類推。因此明文為:

  IM GLAD WE MET

  英文字母的移位以移25位為一個循環,移26位等于沒有移位。所以可以用窮舉法列出所有可能的組合。

  例如:phhw ph diwhu wkh wrjd sduwb

  利用電腦可以方便地列出所有組合,然后從中選出有意義的話:

  qiix qi ejxiv xli xske tevxc
  rjjy rj fkyjw ymj ytlf ufwyd
  skkz sk glzkx znk zumg vgxze
  tlla tl hmaly aol avnh whyaf
  ummb um inbmz bpm bwoi xizbg
  vnnc vn jocna cqn cxpj yjach
  wood wo kpdob dro dyqk zkbdi
  xppe xp lqepc esp ezrl alcej
  yqqf yq mrfqd ftq fasm bmdfk
  zrrg zr nsgre gur gbtn cnegl
  assh as othsf hvs hcuo dofhm
  btti bt puitg iwt idvp epgin
  cuuj cu qvjuh jxu jewq fqhjo
  dvvk dv rwkvi kyv kfxr grikp
  ewwl ew sxlwj lzw lgys hsjlq
  fxxm fx tymxk max mhzt itkmr
  gyyn gy uznyl nby niau julns
  hzzo hz vaozm ocz ojbv kvmot
  iaap ia wbpan pda pkcw lwnpu
  jbbq jb xcqbo qeb qldx mxoqv
  kccr kc ydrcp rfc rmey nyprw
  ldds ld zesdq sgd snfz ozqsx
  meet me after the toga party <-
  nffu nf bgufs uif uphb qbsuz
  oggv og chvgt vjg vqic rctva

  可知明文為:meet me after the toga party

-------------------------------------------------------------------------
【凱撒移位(中文版)】

  就是按照中文字在Unicode編碼表中的順序進行移位,可以用來加密中文的信息。

  例:[中文凱撒移位]
  轉換成Unicode編碼:中文凱撒移位
  移1位后成為:      丮斈凰撓秼低
  轉換成中文:[丮斈凰撓秼低]

[發帖際遇]:  谷伊森文買了MJ白金珍藏版CD送給John,獲得John私人獎勵學分5分.
1 | 樓主| 發表于 2012-9-23 20:58:07
【柵欄密碼(The Rail-Fence Cipher)】

  也稱柵欄易位(Columnar Transposition),即把將要傳遞的信息中的字母交替排成上下兩行,再將下面一行字母排在上面一行的后邊,從而形成一段密碼。柵欄密碼是一種置換密碼。

  例如密文:TEOGSDYUTAENNHLNETAMSHVAED

  解密過程:先將密文分為兩行

  T E O G S D Y U T A E N N
  H L N E T A M S H V A E D

  再按上下上下的順序組合成一句話

  THE LONGEST DAY MUST HAVE AN END.

  .............................................................
  加密時不一定非用兩欄,還是舉《數字城堡》中的一個例子,密文為:

  PFEE SESN RETM MFHA IRWE OOIG MEEN NRMA ENET SHAS DCNS IIAA IEER BRNK FBLE LODI

  去掉空格:PFEESESNRETMMFHAIRWEOOIGMEENNRMAENETSHASDCNSIIAAIEERBRNKFBLELODI

  共64個字符,以8個字符為一欄,排列成8*8的方陣(凱撒方陣):

  P F E E S E S N
  R E T M M F H A
  I R W E O O I G
  M E E N N R M A
  E N E T S H A S
  D C N S I I A A
  I E E R B R N K
  F B L E L O D I

  從上向下豎著讀:PRIMEDIFFERENCEBETWEENELEMENTSRESMONSIBLEFORHIROSHIMAANDNAGASAKI

  插入空格:PRIME DIFFERENCE BETWEEN ELEMENTS RESMONSIBLE FOR HIROSHIMA AND NAGASAKI (廣島和長崎的原子彈轟炸的最主要區別)

  .............................................................
  柵欄密碼也可以用于中文,不過比較容易破解。

  明文:         這是中文的柵欄密碼
  密文(3*3方陣):這文欄是的密中柵碼

  由于中文用規則的柵欄比較容易破解,所以產生了一些變體,例如道家心法密籍《天仙金丹心法》中的一段加密方法。密文如下:

  ○ 茫 天 : 摹 然 月 終 為 鼎 半 是 真 滅 器 輪 假 不 但 伸 凈 著 定 分 泥 萬 ○ 無 ○ 光 人 經 法 一 從 塵 色 返 我 權 自 法 中 妙 大 空 照 生 屈 來 好 路 形 神 海 ○ 便 還 未 歸

  ○ 茫
  天 : 摹
  然 月 終 為
  鼎 半 是 真 滅
  器 輪 假 不 但 伸
  凈 著 定 分 泥 萬 ○
  無 ○ 光 人 經 法 一 從
  塵 色 返 我 權 自 法 中 妙
  大 空 照 生 屈 來 好 路 形 神
  海 ○ 便 還 未 歸

  明文(從上向下豎著讀):天然鼎器凈無塵,大海茫茫月半輪。著色空摹終是假,定光返照便為真。不分人我生還滅,但泥經權屈未伸。萬法自來歸一法,好從中路妙形神。

  .............................................................
  利用電腦進行加密或解密,建議使用“列舉加密”或“列舉解密”,電腦會自動嘗試一些正好匹配的欄位進行列舉。

  lyiroonevuclesey

  4欄:
  loveyousincerely

  8欄:
  lionvceeyroeulsy
| 樓主| 發表于 2012-9-23 20:58:59
【維吉尼亞密碼(Vigenère Cipher)】

  由于頻率分析法可以有效的破解單表替換密碼,法國密碼學家維吉尼亞于1586年提出一種多表替換密碼,即維吉尼亞密碼,也稱維熱納爾密碼。維吉尼亞密碼引入了“密鑰”的概念,即根據密鑰來決定用哪一行的密表來進行替換,以此來對抗字頻統計。

  加密算法:例如密鑰的字母為[d],明文對應的字母[b]。根據字母表的順序[d]=4,[b]=2,那么密文就是[d]+[b]-1=4+2-1=5=[e],因此加密的結果為[e]。解密即做此逆運算。

  加密公式:密文 = (明文 + 密鑰) Mod 26 - 1
  解密公式:明文 = [26 + (密文 - 密鑰)] Mod 26 + 1

  也可以用查表法來進行加密:例如密鑰的字母為[d],明文對應的字母[b],在下圖的表格第一行找到字母"d"(深藍色),再在左邊第一列找到字母"b"(綠色),兩個字母的交叉點(b行d列)就是字母"E",所以對應的密文字母為[e]。

  [-----------------圖-----------------]

    a b c d e f g h i j k l m n o p q r s t u v w x y z
  a A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
  b B C D E F G H I J K L M N O P Q R S T U V W X Y Z A
  c C D E F G H I J K L M N O P Q R S T U V W X Y Z A B
  d D E F G H I J K L M N O P Q R S T U V W X Y Z A B C
  e E F G H I J K L M N O P Q R S T U V W X Y Z A B C D
  f F G H I J K L M N O P Q R S T U V W X Y Z A B C D E
  g G H I J K L M N O P Q R S T U V W X Y Z A B C D E F
  h H I J K L M N O P Q R S T U V W X Y Z A B C D E F G
  i I J K L M N O P Q R S T U V W X Y Z A B C D E F G H
  j J K L M N O P Q R S T U V W X Y Z A B C D E F G H I
  k K L M N O P Q R S T U V W X Y Z A B C D E F G H I J
  l L M N O P Q R S T U V W X Y Z A B C D E F G H I J K
  m M N O P Q R S T U V W X Y Z A B C D E F G H I J K L
  n N O P Q R S T U V W X Y Z A B C D E F G H I J K L M
  o O P Q R S T U V W X Y Z A B C D E F G H I J K L M N
  p P Q R S T U V W X Y Z A B C D E F G H I J K L M N O
  q Q R S T U V W X Y Z A B C D E F G H I J K L M N O P
  r R S T U V W X Y Z A B C D E F G H I J K L M N O P Q
  s S T U V W X Y Z A B C D E F G H I J K L M N O P Q R
  t T U V W X Y Z A B C D E F G H I J K L M N O P Q R S
  u U V W X Y Z A B C D E F G H I J K L M N O P Q R S T
  v V W X Y Z A B C D E F G H I J K L M N O P Q R S T U
  w W X Y Z A B C D E F G H I J K L M N O P Q R S T U V
  x X Y Z A B C D E F G H I J K L M N O P Q R S T U V W
  y Y Z A B C D E F G H I J K L M N O P Q R S T U V W X
  z Z A B C D E F G H I J K L M N O P Q R S T U V W X Y

  假如對如下明文加密:

  to be or not to be that is the question

  當選定“have”作為密鑰時,加密過程是:密鑰第一個字母為[h],明文第一個為[t],因此可以找到在h行t列中的字母[a],依此類推,得出對應關系如下:

  密鑰:ha ve ha veh av eh aveh av eha vehaveha
  明文:to be or not to be that is the question
  密文:ao wi vr isa tj fl tcea in xoe lylsomvn
本帖子中包含更多圖片或附件資源

您需要 登錄 才可以下載或查看,沒有帳號?加入學院

| 樓主| 發表于 2012-9-23 20:59:19
【Polybius密碼(Polybius Cipher)】

  也稱棋盤密碼,是利用波利比奧斯方陣(Polybius Square)進行加密的密碼方式,產生于公元前兩世紀的希臘,相傳是世界上最早的一種密碼。

  假設我們需要發送明文訊息 “Attack at once”, 用一套秘密混雜的字母表填滿波利比奧斯方陣,像是這樣:

    A D F G X
  A b t a l p
  D d h o z k
  F q f v s n
  G g j c u x
  X m r e w y

  i和j視為同一個字,使字母數量符合 5 × 5 格。之所以選擇這五個字母,是因為它們譯成摩斯密碼時不容易混淆,可以降低傳輸錯誤的機率。使用這個方格,找出明文字母在這個方格的位置,再以那個字母所在的欄名稱和列名稱代替這個字母。可將該訊息轉換成處理過的分解形式。

  明文:A T T A C K A T O N C E
  密文:AF AD AD AF GF DX AF AD DF FX GF XF

  A,D,F,G,X也可以用數字1,2,3,4,5來代替,這樣密文就成了:

  13 12 12 13 43 25 13 12 23 35 43 53

-------------------------------------------------------------------------
【ADFGX/ADFGVX密碼(ADFGX/ADFGVX Cipher)】

ADFGX
  1918年,第一次世界大戰將要結束時,法軍截獲了一份德軍電報,電文中的所有單詞都由A、D、F、G、X五個字母拼成,因此被稱為ADFGX密碼。ADFGX密碼是1918年3月由德軍上校Fritz Nebel發明的,是結合了Polybius密碼和置換密碼的雙重加密方案。A、D、F、G、X即Polybius方陣中的前5個字母。

  明文:A T T A C K A T O N C E
  經過Polybius變換:AF AD AD AF GF DX AF AD DF FX GF XF

  下一步,利用一個移位密鑰加密。假設密鑰是“CARGO”,將之寫在新格子的第一列。再將上一階段的密碼文一列一列寫進新方格里。

  C A R G O
  _________
  A F A D A
  D A F G F
  D X A F A
  D D F F X
  G F X F X

  最后,密鑰按照字母表順序“ACGOR”排序,再按照此順序依次抄下每個字母下面的整列訊息,形成新密文。如下:

  FAXDF ADDDG DGFFF AFAXX AFAFX

  在實際應用中,移位密鑰通常有兩打字符那么長,且分解密鑰和移位密鑰都是每天更換的。

ADFGVX
  在1918年6月,再加入一個字V擴充。變成以6×6格共36個字符加密。這使得所有英文字母(不再將I和J視為同一個字)以及數字0到9都可混合使用。這次增改是因為以原來的加密法發送含有大量數字的簡短信息有問題。
| 樓主| 發表于 2012-9-23 21:00:22
【乘法密碼(Multiplication Cipher)】

  乘法密碼也是一種簡單的替代密碼,與凱撒密碼相似,凱撒密碼用的是加法,而乘法密碼用的自然是乘法。這種方法形成的加密信息保密性比較低。

  加密公式:密文 = (明文 * 乘數) Mod 26

  對于乘數密碼,只有當乘數與26互質時,加密之后才會有唯一的解,因此乘數只可能有如下11種的選擇:

  乘數 = 3,5,7,9,11,15,17,19,21,23,25

  仿射密碼和希爾密碼因為都用到了乘法,所以乘數也受到相同的局限。

-------------------------------------------------------------------------
【仿射密碼(Affine Shift)】

  仿射密碼就是凱撒密碼和乘法密碼的結合。

  加密公式:密文 = (明文 * 乘數 + 位移數) Mod 26

-------------------------------------------------------------------------
【希爾密碼(Hill Cipher)】

  希爾密碼就是矩陣乘法密碼,運用基本矩陣論原理的替換密碼。每個字母當作26進制數字:A=0, B=1, C=2... 一串字母當成n維向量,跟一個n×n的密鑰矩陣相乘,再將得出的結果模26。希爾密碼的優點是完全隱藏了字符的頻率信息,弱點是容易被已知明文攻擊擊破。

加密
  例如:密鑰矩陣
  1 3
  0 2

  明文:HI THERE

  去空格,2個字母一組,根據字母表順序換成矩陣數值如下,末尾的E為填充字元:

  HI TH ER EE
  8  20 5  5
  9  8  18 5

  HI 經過矩陣運算轉換為 IS,具體算法參考下面的說明:

  |1 3| 8 e1*8+3*9=35 MOD26=9 =I
  |0 2| 9 e0*8+2*9=18 MOD26=18=S

  用同樣的方法把“HI THERE”轉換為密文“IS RPGJTJ”,注意明文中的兩個E分別變為密文中的G和T。

解密
  解密時,必須先算出密鑰的逆矩陣,然后再根據加密的過程做逆運算。

  逆矩陣算法公式:
  |A B| = 1/(AD-BC) * | D -B|
  |C D|               |-C  A|

  例如密鑰矩陣=
  |1 7|
  |0 3|
  AD-BC=1*3-0*7=3 3*X=1 mod26 所以 X=9
  因此
  |1 7| 的逆矩陣為: 9 * |3 -7|
  |0 3|                |0  1|

  假設密文為“FOAOESWO”

  FO AO ES WO
   6  1  5 23
  15 15 19 15

  9* |3 -7| | 6| = 9*(3*6-7*15)=-783 mod26 = 23=W
     |0  1| |15| = 9*(0*6+1*15)= 135 mod26 = 5 =E

  所以密文“FOAOESWO”的明文為“WEREDONE”

-------------------------------------------------------------------------
【Playfair密碼(Playfair Cipher)】

  Playfair將明文中的雙字母組合作為一個單元對待,并將這些單元轉換為雙字母組合。加密后的字符出現的頻率在一定程度上被均勻化。

  5*5變換矩陣(I或J視為同一字符):

  C I P H E
  R A B D F
  G K L M N
  O Q S T U
  V W X Y Z

  加密規則:按成對字母加密

  相同對中的字母加分隔符(如x)
  ballon -> ba lx lo on
  同行取右邊:he->ec
  同列取下邊:dm->mt
  其他取交叉:kt->mq  od->tr

  例如:ballon -> ba lx lo on -> db sp gs ug
| 樓主| 發表于 2012-9-23 21:00:39
【摩斯電碼】

  摩斯電碼(摩爾斯電碼)是一種發報用的信號代碼,是一種替代密碼,用點(Dot)和劃(Dash)的組合來表示各個英文字母或標點。

  國際標準摩斯電碼表

  1 *----    A *-     N -*     [.] *-*-*-
  2 **---    B -***   O ---    [,] --**--
  3 ***--    C -*-*   P *--*   [:] ---***
  4 ****-    D -**    Q --*-   ['] *----*
  5 *****    E *      R *-*    [?] **--**
  6 -****    F **-*   S ***    [-] -****-
  7 --***    G --*    T -      [()] -*--*-
  8 ---**    H ****   U **-    [@] *--*-*
  9 ----*    I **     V ***-   [—] -***-
  0 -----    J *---   W *--    分數線 -**-*
         K -*-    X -**-
         L *-**   Y -*--   終了[\r] ***-*-
         M --     Z --**   始信[\n] -*-*-


  例:Hello (斜線代表字母之間的間隔)
  ****/*/*-**/*-**/---/
| 樓主| 發表于 2012-9-23 21:00:59
【百度/Google/網頁字符】

  下面解釋一下在百度、Google搜索中文的關鍵詞時,地址欄上出現的奇怪字符。

百度字符(GB2312)
  例如在百度搜索“你好”兩個字,會轉到一個地址為  http://www.baidu.com/s?wd=%C4%E3%BA%C3  的網頁。

  密文(GB碼16進制):%C4%E3%BA%C3
  密文(GB碼十進制):50403 47811
  明文:你好

  百度用的是GB2312的中文編碼,是16進制的。GB2312是標準的簡體中文編碼。“你”字的GB碼為C4E3,“好”字的GB碼為BAC3。“你好”轉換成十進制為50403和47811。

Google字符(URI)
  例如在Google搜索“你好”兩個字,會轉到一個地址為  http://www.google.cn/search?q=%E4%BD%A0%E5%A5%BD  的網頁。

  密文(URI):%E4%BD%A0%E5%A5%BD
  明文:你好

  URI全稱Uniform Resource Identifier(通用資源標識符)。Internet可用的每種資源 - HTML文檔、圖像、視頻片段、程序等 - 由一個通過URI進行定位。

網頁編碼(Unicode)
  論壇里常玩的一個把戲,就是讓你回帖時寫一堆像天書一樣的奇怪字符,而回帖之后就能看到相應的文字。

  密文(Unicode16進制):樓主是個天才
  密文(Unicode10進制):樓主是個天才
  明文:樓主是個天才

  這里使用的是Unicode編碼(十進制),Unicode是一種全世界范圍的文字編碼,網頁都支持這種編碼。

Alt+數字小鍵盤
  按住Alt鍵,在任意文本框中,用鍵盤右邊的數字小鍵盤輸入55021,然后松開Alt鍵,這時你看到了什么?

  用同樣的方法分別輸入“你好”兩個字的GB代碼(十進制)50403、47811,這時你將在文本框中看到這兩個字。

  注意在qq的對話框中,要使用Unicode代碼(十進制)20320、22909。
| 樓主| 發表于 2012-9-23 21:01:22
【MD5】

簡介
  MD5的全稱是Message-Digest Algorithm 5(信息-摘要算法),在90年代初由Ronald L. Rivest開發出來,經MD2、MD3和MD4發展而來。

  MD5是一種散列(Hash)算法,散列算法的用途不是對明文加密,讓別人看不懂,而是通過對信息摘要的比對,防止對原文的篡改。通常對散列算法而言,所謂的“破解”,就是找碰撞。

  MD5是把一個任意長度的字節串加密成一個固定長度的大整數(通常是16位或32位),加密的過程中要篩選過濾掉一些原文的數據信息,因此想通過對加密的結果進行逆運算來得出原文是不可能的。

  關于MD5的應用,舉個具體的例子吧。例如你在一個論壇注冊一個賬號,密碼設為“qiuyu21”。此密碼經過MD5運算后,變成“287F1E255D930496EE01037339CD978D”,當你點“提交”按鈕提交時,服務器的數據庫中不記錄你的真正密碼“qiuyu21”,而是記錄那個MD5的運算結果。然后,你在此論壇登錄,登錄時你用的密碼是“qiuyu21”,電腦再次進行MD5運算,把“qiuyu21”轉為“287F1E255D930496EE01037339CD978D”,然后傳送到服務器那邊。這時服務器就把你傳過來的MD5運算結果與數據庫中你注冊時的MD5運算結果比較,如果相同則登錄成功。

  也就是說,服務器只是把MD5運算結果作比較。你也許會問,服務器為什么不用直接對你的密碼“qiuyu21”進行校驗呢?因為如果服務器的數據庫里存的是你的真實密碼,那么黑客只要破解了服務器的數據庫,那么他也就得到了所有人的密碼,他可以用里面的任意密碼進行登錄。但是如果數據庫里面的密碼都是MD5格式的,那么即使黑客得到了“287F1E255D930496EE01037339CD978D”這一串數字,他也不能以此作為密碼來登錄。

  現在再來談談MD5的破解。假設你是攻擊者,已經得到了“287F1E255D930496EE01037339CD978D”這一串數字,那么你怎么能得出我的密碼是“qiuyu21”呢?因為MD5算法是不可逆的,你只能用暴力法(窮舉法)來破解,就是列舉所有可能的字母和數字的排列組合,然后一一進行MD5運算來驗證運算結果是否為“287F1E255D930496EE01037339CD978D”,“qiuyu21”這個密碼是7位英文字符和數字混合,這樣的排列組合的數量是個天文數字,如果一一列舉,那么在你有生之年是看不到了。所以只有使用黑客字典才是一種有效可行的方法,黑客字典可以根據一些規則自動生成。例如“qiuyu21”這個密碼,就是一種常見的組合,規則是:拼音+拼音+數字,拼音總共大約400個,數字以2位數100個來算,這種規則總共約400*400*100=16,000,000種可能,使用優化的算法,估計用1秒就能破解吧。就算考慮到字母開頭大寫或全部大寫的習慣,也只會花大約10幾秒時間。如果是破解你熟悉的某個人的密碼,那么你可以根據你對他的了解來縮小詞典的范圍,以便更快速的破解。這種破解方法在很大程度上依賴于你的運氣。

  最后談談MD5的碰撞。根據密碼學的定義,如果內容不同的明文,通過散列算法得出的結果(密碼學稱為信息摘要)相同,就稱為發生了“碰撞”。因為MD5值可以由任意長度的字符計算出來,所以可以把一篇文章或者一個軟件的所有字節進行MD5運算得出一個數值,如果這篇文章或軟件的數據改動了,那么再計算出的MD5值也會產生變化,這種方法常常用作數字簽名校驗。因為明文的長度可以大于MD5值的長度,所以可能會有多個明文具有相同的MD5值,如果你找到了兩個相同MD5值的明文,那么你就是找到了MD5的“碰撞”。

  散列算法的碰撞分為兩種,強無碰撞和弱無碰撞。還是以前面那個密碼為例:假如你已知“287F1E255D930496EE01037339CD978D”這個MD5值,然后找出了一個單詞碰巧也能計算出和“qiuyu21”相同的MD5值,那么你就找到了MD5的“弱無碰撞”,其實這就意味著你已經破解了MD5。如果不給你指定的MD5值,讓你隨便去找任意兩個相同MD5值的明文,即找“強無碰撞”,顯然要相對容易些了,但對于好的散列算法來說,做到這一點也很不容易了。

  值得一提的是,強無碰撞已經被中國的王小云老師給搞定了,她提出的算法可以在短時間內找到碰撞,在世界上引起了轟動,現在的電腦大約一兩個小時就可以找到一對碰撞。遺憾的是,找到強無碰撞在實際破解中沒有什么真正的用途,所以現在MD5仍然是很安全的。
| 樓主| 發表于 2012-9-23 21:01:48
MD5算法描述
  對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)
返回版塊
123
尚未登錄
您需要登錄后才可以回帖 登錄 | 加入學院