<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    801 WORKPLACE

    追尋夢想,自由生活

    BlogJava 首頁 新隨筆 聯系 聚合 管理
      10 Posts :: 1 Stories :: 1 Comments :: 0 Trackbacks
    首先介紹下SHA1,老美的東西當然得看原文了,而且原文簡單易懂。
    1: FIPS 180-1 Secure Hash Standard:http://www.itl.nist.gov/fipspubs/fip180-1.htm

    2: Secure Hash Standard: http://csrc.nist.gov/publications/fips/fips180-2/fips180-2.pdf

    看過原文,對SHA1就會有個大致了解了,這里再貼出個中文翻譯吧。


    1 SHA1算法簡介
    安全哈希算法(Secure Hash Algorithm)主要適用于數字
    簽名標準(Digital Signature Standard DSS)里面定義的
    數字簽名算法(Digital Signature Algorithm DSA)。對
    于長度小于2^64位的消息,SHA1會產生一個160位的消息摘
    要。當接收到消息的時候,這個消息摘要可以用來驗證數據
    的完整性。在傳輸的過程中,數據很可能會發生變化,那么這時候就會產生不同的消息摘要。
    SHA1有如下特性:不可以從消息摘要中復原信息;兩個不同的消息不會產生同樣的消息摘要。
    2 術語和概念
    2.1位(Bit),字節(Byte)和字(Word)
    SHA1始終把消息當成一個位(bit)字符串來處理。本文中,一個“字”(Word)是32位,而一個“字
    節”(Byte)是8位。比如,字符串“abc”可以被轉換成一個位字符串:01100001 01100010 01100011。它
    也可以被表示成16進制字符串: 0x616263.
    2.2 運算符和符號
    下面的邏輯運算符都被運用于“字”(Word)
    X^Y = X, Y邏輯與
    X \/ Y = X, Y邏輯或
    X XOR Y= X, Y邏輯異或
    ~X = X邏輯取反
    X+Y定義如下:
    字 X 和 Y 代表兩個整數 x 和y, 其中 0 <= x < 2^32 且 0 <= y < 2^32. 令整數z = (x + y) mod 2^32.
    這時候 0 <= z < 2^32. 將z轉換成字Z, 那么就是 Z = X + Y.
    循環左移位操作符Sn(X)。X是一個字,n是一個整數,0<=n<=32。Sn(X) = (X<<n)OR(X>>32-n)
    X<<n定義如下:拋棄最左邊的n位數字,將各個位依次向左移動n位,然后用0填補右邊的n位(最后結果還是
    32位)。X>>n是拋棄右邊的n位,將各個位依次向右移動n位,然后在左邊的n位填0。因此可以叫Sn(X)位循環
    移位運算
    3 SHA1算法描述
    在SHA1算法中,我們必須把原始消息(字符串,文件等)轉換成位字符串。SHA1算法只接受位作為輸入。假
    設我們對字符串“abc”產生消息摘要。首先,我們將它轉換成位字符串如下:
    01100001 01100010 01100011
    ―――――――――――――
    ‘a’=97 ‘b’=98 ‘c’=99
    這個位字符串的長度為24。下面我們需要5個步驟來計算MD5。
    3.1 補位
    消息必須進行補位,以使其長度在對512取模以后的余數是448。也就是說,(補位后的消息長度)%512 =
    448。即使長度已經滿足對512取模后余數是448,補位也必須要進行。
    補位是這樣進行的:先補一個1,然后再補0,直到長度滿足對512取模后余數是448。總而言之,補位是至少
    補一位,最多補512位。還是以前面的“abc”為例顯示補位的過程。
    原始信息: 01100001 01100010 01100011
    補位第一步:01100001 01100010 01100011 1
    首先補一個“1”
    補位第二步:01100001 01100010 01100011 10…..0
    然后補423個“0”
    我們可以把最后補位完成后的數據用16進制寫成下面的樣子
    61626380 00000000 00000000 00000000
    00000000 00000000 00000000 00000000
    00000000 00000000 00000000 00000000
    00000000 00000000
    現在,數據的長度是448了,我們可以進行下一步操作。
    3.2 補長度
    所謂的補長度是將原始數據的長度補到已經進行了補位操作的消息后面。通常用一個64位的數據來表示原始
    消息的長度。如果消息長度不大于2^64,那么第一個字就是0。在進行了補長度的操作以后,整個消息就變成
    下面這樣了(16進制格式)
    61626380 00000000 00000000 00000000
    00000000 00000000 00000000 00000000
    00000000 00000000 00000000 00000000
    00000000 00000000 00000000 00000018
    如果原始的消息長度超過了512,我們需要將它補成512的倍數。然后我們把整個消息分成一個一個512位的數
    據塊,分別處理每一個數據塊,從而得到消息摘要。
    3.3 使用的常量
    一系列的常量字K(0), K(1), ... , K(79),如果以16進制給出。它們如下:
    Kt = 0x5A827999 (0 <= t <= 19)
    Kt = 0x6ED9EBA1 (20 <= t <= 39)
    Kt = 0x8F1BBCDC (40 <= t <= 59)
    Kt = 0xCA62C1D6 (60 <= t <= 79).
    3.4 需要使用的函數
    在SHA1中我們需要一系列的函數。每個函數ft (0 <= t <= 79)都操作32位字B,C,D并且產生32位字作為輸
    出。ft(B,C,D)可以如下定義
    ft(B,C,D) = (B AND C) or ((NOT B) AND D) ( 0 <= t <= 19)
    ft(B,C,D) = B XOR C XOR D (20 <= t <= 39)
    ft(B,C,D) = (B AND C) or (B AND D) or (C AND D) (40 <= t <= 59)
    ft(B,C,D) = B XOR C XOR D (60 <= t <= 79).
    3.5 計算消息摘要
    必須使用進行了補位和補長度后的消息來計算消息摘要。計算需要兩個緩沖區,每個都由5個32位的字組成,
    還需要一個80個32位字的緩沖區。第一個5個字的緩沖區被標識為A,B,C,D,E。第一個5個字的緩沖區被標
    識為H0, H1, H2, H3, H4
    。80個字的緩沖區被標識為W0, W1,..., W79
    另外還需要一個一個字的TEMP緩沖區。
    為了產生消息摘要,在第4部分中定義的16個字的數據塊M1, M2,..., Mn
    會依次進行處理,處理每個數據塊Mi 包含80個步驟。
    在處理每個數據塊之前,緩沖區 被初始化為下面的值(16進制)
    H0 = 0x67452301
    H1 = 0xEFCDAB89
    H2 = 0x98BADCFE
    H3 = 0x10325476
    H4 = 0xC3D2E1F0.
    現在開始處理M1, M2, ... , Mn。為了處理 Mi,需要進行下面的步驟
    (1). 將 Mi 分成 16 個字 W0, W1, ... , W15, W0 是最左邊的字
    (2). 對于 t = 16 到 79 令 Wt = S1(Wt-3 XOR Wt-8 XOR Wt- 14 XOR Wt-16).
    (3). 令 A = H0, B = H1, C = H2, D = H3, E = H4.
    (4) 對于 t = 0 到 79,執行下面的循環
    TEMP = S5(A) + ft(B,C,D) + E + Wt + Kt;
    E = D; D = C; C = S30(B); B = A; A = TEMP;
    (5). 令 H0 = H0 + A, H1 = H1 + B, H2 = H2 + C, H3 = H3 + D, H4 = H4 + E.
    在處理完所有的 Mn, 后,消息摘要是一個160位的字符串,以下面的順序標識
    H0 H1 H2 H3 H4.
    對于SHA256,SHA384,SHA512。你也可以用相似的辦法來計算消息摘要。對消息進行補位的算法完全是一樣
    的。
    posted on 2010-11-22 14:30 WangShishuai 閱讀(701) 評論(0)  編輯  收藏 所屬分類: 加密算法

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 亚洲综合最新无码专区| 亚洲免费观看视频| 亚洲国产综合精品中文第一| 24小时日本韩国高清免费| 亚洲最大免费视频网| 瑟瑟网站免费网站入口| 91成年人免费视频| 亚洲欧洲日产国码av系列天堂 | 夜色阁亚洲一区二区三区| 亚洲国产高清视频在线观看| a拍拍男女免费看全片| 亚洲狠狠成人综合网| 免费在线观看亚洲| 国产精品hd免费观看| 亚洲Av永久无码精品三区在线| 免费精品国自产拍在线播放| 免费无码又黄又爽又刺激| 亚洲a无码综合a国产av中文| 成人免费毛片观看| 久久久亚洲欧洲日产国码aⅴ| 鲁丝片一区二区三区免费| 久久亚洲精品无码aⅴ大香 | 希望影院高清免费观看视频| 亚洲精品免费视频| 青娱分类视频精品免费2| 国产精品亚洲五月天高清| 成人免费777777| 久久精品视频亚洲| 免费H网站在线观看的| 免费福利在线观看| 亚洲成年轻人电影网站www | 四色在线精品免费观看| 黄视频在线观看免费| 亚洲成电影在线观看青青| 国产jizzjizz视频免费看| 国产精品免费高清在线观看| 亚洲国产综合专区电影在线| 天天摸天天操免费播放小视频| 中文字幕在线免费播放| 国产99在线|亚洲| 亚洲精品乱码久久久久久按摩|