演算法基礎( 演算法)

2021-04-02 06:52:23 字數 2682 閱讀 9615

演算法基礎(md5演算法)

hash演算法有兩種,即sha-1和md5演算法這裡先介紹md5演算法.

md5產生乙個128位的hash值,在經過一寫初始樹立後,將明文分成了512位的塊,再將每一塊分成16個32位的子塊。演算法的輸出是4個32位的塊,連線起來構成128位的hash值。

首先,將訊息填充到比512的倍數少64位,填充時先向訊息末尾填乙個1,然後再填滿0,然後後面再加上乙個64位的訊息長度的表示(不包括填充位)。這兩步使訊息長度恰好是512的倍數,同時保證不同訊息在填充後仍不相同。

初始化4個32位變數:

a=0x01234567

b=0x89abcdef

c=0xfedcba98

d=0x76543210

這些變數成為鏈變數。

然後,開始演算法的主迴圈。這個迴圈對訊息中所有的塊都執行一次。將4個變數複製到不同的變數:a值為a,b值為b,c值為c,d值為d。

主迴圈有4圈,都很相似。每圈使用乙個不同的操作,重複16次。每個操作完成乙個a,b,c和d中三個變數的非線性函式。然後,將結果與第四個變數、文字的乙個子塊和乙個常數相加。然後,將結果混換左移乙個可變值的位數,再將結果與a,b,c和d之一相加。最後用結果來代替a,b,c和d之一。

共有4個非線性函式,每次操作使用乙個,每圈都不相同。

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))

㈩為異或,∧為與,∨為或,「為非

如果mi代表訊息的第i個子塊(0到15),而<<

第一圈:

ff(d,a,b,c,m1,12,0xe8c7b756)

ff(c,d,a,b,m2,17,0x242070db)

ff(b,c,d,a,m3,22,0xclbdceee)

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,0xf6b901122)

ff(d,a,b,c,m13,12,0xfd987193)

ff(c,d,a,b,m14,17,0xa6794383)

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,0x2b5e5a51)

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,0xd8ale681)

gg(b,c,d,a,m4,20,0xe7d3fbc8)

gg(a,b,c,d,m9,5,0x21elcde6)

gg(d,a,b,c,m14,9.0xc33707d6)

gg(c,d,a,b,m3,14,0xf4d50d87)

gg(b,c,d,a,m8,20,0x45al4ed)

gg(a,b,c,d,m13,5,0xa9e3e905)

gg(d,a,b,c,m2,9,0xfcefaef8)

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,0x28967ec6)

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,0xlfa27cf8)

hh(b,c,d,a,m2,23,0xc4ac5665)

這些常數ti步,ti為2的32次方乘abs(sin(i))的整數部分,其中i為弧度。

完成這些之後,a,b,c,d與a,b,c,d相加,演算法開始處理下一塊。最後的輸出結果為a,b,c,d相連線。

對md5的密碼分析表明,md5還是比較安全的。

演算法基礎 排序演算法

1.氣泡排序 原理有一列資料,從第乙個數開始,第乙個和第二個進行比較,如果第乙個大就交換,如果第二個大就不變,再第二個和第三個比較,一次類推,第二輪是從第乙個數開始比到倒數第二個數,第三輪是從第乙個數比到倒數第三個數.以此類推.def bubble nums for j in range len n...

演算法基礎 Hash演算法

hash,一般翻譯做 雜湊 也有直接音譯為 雜湊 的,就是把任意長度的輸入,通過雜湊演算法,變換成固定長度的輸出,該輸出就是雜湊值。這種轉換是一種壓縮對映,也就是,雜湊值的空間通常遠小於輸入的空間,不同的輸入可能會雜湊成相同的輸出,所以不可能從雜湊值來唯一的確定輸入值。簡單的說就是一種將任意長度的訊...

演算法基礎 遞迴演算法

遞迴演算法是將重複問題分解為同類的子問題而解決問題的方法,其核心思想是分治策略。簡單來說就是自己呼叫自己。直到達到退出遞迴的條件,則完成遞迴。1 找整個遞迴的終止條件 遞迴應該在什麼時候結束?3 本級遞迴應該做什麼 在這一級遞迴中,應該完成什麼任務?優點 遞迴的核心思想就是將乙個大問題,拆解成乙個小...