<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)  編輯  收藏 所屬分類: 加密算法

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


    網站導航:
     
    主站蜘蛛池模板: 免费无码肉片在线观看| 少妇无码一区二区三区免费| 日本阿v免费费视频完整版| 亚洲欧洲日产国产综合网| 在线成人精品国产区免费| 极品美女一级毛片免费| 99精品视频在线观看免费播放| 成人免费无码大片A毛片抽搐| 亚洲在成人网在线看| 可以免费看黄的网站| 亚洲二区在线视频| 四虎在线视频免费观看| 全部在线播放免费毛片| 国产午夜亚洲不卡| 日韩在线不卡免费视频一区| 久久亚洲精品成人av无码网站| 四虎影视在线看免费观看| 国产亚洲成人久久| 18观看免费永久视频| 国产精品亚洲片在线va| 国产精品高清全国免费观看| 日本一区二区三区在线视频观看免费| 亚洲一级特黄无码片| 精品国产_亚洲人成在线| 亚洲精品成人久久久| 国产午夜不卡AV免费| 在线免费观看亚洲| 全免费一级午夜毛片| 亚洲一级毛片免费观看| 大地资源中文在线观看免费版| 亚洲av无码成人黄网站在线观看 | 亚洲成AV人片在线观看WWW| 亚在线观看免费视频入口| 亚洲国产成人在线视频| 国产成人免费a在线视频app| 国产在线观看免费av站| 亚洲一卡2卡3卡4卡国产网站 | 亚洲网红精品大秀在线观看| 亚洲AV无码精品国产成人| 四虎成人免费网址在线| 在线视频网址免费播放|