⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fip180-1.txt

📁 sha密码检验的示例 希望对大家有 帮助
💻 TXT
📖 第 1 页 / 共 3 页
字号:

          z  =  (x + y) mod 2^32.

     Then 0 <= z < 2^32.  Convert z to a word,  Z, and define Z = X + Y.

 c.  The circular left shift operation S^n(X), where X is a word and n is an 
     integer with 0 <= n < 32, is defined by

          S^n(X)  =  (X << n) OR (X >> 32-n).
          
     In the above, X << n is obtained as follows: discard the left-most n
     bits of X and then pad the result with n zeroes on the right (the result
     will still be 32 bits).  X >> n is obtained by discarding the right-most 
     n bits of X and then padding the result with n zeroes on the left.  Thus
     S^n(X) is equivalent to a circular shift of X by n positions to the left.

                       	     4. MESSAGE PADDING
 
The SHA-1 is used to compute a message digest for a message or data file that
is provided as input.  The message or data file should be considered to be a 
bit string.  The length of the message is the number of bits in the message 
(the empty message has length 0).  If the number of bits in a message is a 
multiple of 8, for compactness we can represent the message in hex.  The 
purpose of message padding is to make the total length of a padded message a 
multiple of 512.  The SHA-1 sequentially processes blocks of 512 bits when 
computing the message digest.  The following specifies how this padding shall
be performed.  As a summary, a "1" followed by m "0"s followed by a 64-bit
integer are appended to the end of the message to produce a padded message of
length 512 * n.  The 64-bit integer is l, the length of the original message.
The padded message is then processed by the SHA-1 as n 512-bit blocks.

Suppose a message has length l < 2^64.  Before it is input to the SHA-1, the 
message is padded on the right as follows:

 a.  "1" is appended.  Example: if the original message is "01010000", this
     is padded to "010100001".

 b.  "0"s are appended.  The number of "0"s will depend on the original length
     of the message.  The last 64 bits of the last 512-bit block are reserved 
     for the length l of the original message.

     Example:  Suppose the original message is the bit string

          01100001 01100010 01100011 01100100 01100101.
          
     After step (a) this gives

          01100001 01100010 01100011 01100100 01100101 1.

     Since l = 40, the number of bits in the above is 41 and 407 "0"s are 
     appended, making the total now 448. This gives (in hex)

          61626364 65800000 00000000 00000000
          00000000 00000000 00000000 00000000
          00000000 00000000 00000000 00000000
          00000000 00000000.

 c.  Obtain the 2-word representation of l, the number of bits in the original
     message.  If l < 2^32 then the first word is all zeroes.  Append these
     two words to the padded message. 
         
     Example: Suppose the original message is as in (b). Then l = 40 (note 
     that l is computed before any padding). The two-word representation of
     40 is hex 00000000 00000028. Hence the final padded message is hex

          61626364 65800000 00000000 00000000
          00000000 00000000 00000000 00000000
          00000000 00000000 00000000 00000000
          00000000 00000000 00000000 00000028.

The padded message will contain 16 * n words for some n > 0.  The padded 
message is regarded as a sequence of n blocks M(1) , M(2), ... , M(n), where 
each M(i) contains 16 words and M(1) contains the first characters (or bits)
of the message.

                           5. FUNCTIONS USED

A sequence of logical functions f(0), f(1),..., f(79) is used in the SHA-1.
Each f(t), 0 <= t <= 79, operates on three 32-bit words B, C, D and produces
a 32-bit word as output.  f(t;B,C,D) is defined as follows:
for words B, C, D,

     f(t;B,C,D) = (B AND C)  OR  ((NOT B) AND D)              ( 0 <= t <= 19)

     f(t;B,C,D) = B  XOR   C   XOR   D                        (20 <= t <= 39)

     f(t;B,C,D) = (B AND C)  OR  (B AND D)  OR  (C AND D)     (40 <= t <= 59)

     f(t;B,C,D) = B   XOR   C   XOR  D                        (60 <= t <= 79).

                             6. CONSTANTS USED

    A sequence of constant words K(0), K(1), ... , K(79) is used in the SHA-1.
In hex these are given by

      K(t) = 5A827999         ( 0 <= t <= 19)

      K(t) = 6ED9EBA1         (20 <= t <= 39)

      K(t) = 8F1BBCDC         (40 <= t <= 59)

      K(t) = CA62C1D6         (60 <= t <= 79).

                     7. COMPUTING THE MESSAGE DIGEST
   
    The message digest is computed using the final padded message. The
computation uses two buffers, each consisting of five 32-bit words, and a
sequence of eighty 32-bit words.  The words of the first 5-word buffer are
labeled A,B,C,D,E.  The words of the second 5-word buffer are labeled H0, H1,
H2, H3, H4.  The words of the 80-word sequence are labeled W(0), W(1),...,
W(79).  A single word buffer TEMP is also employed.
   
    To generate the message digest, the 16-word blocks M(1), M(2),..., M(n)
defined in Section 4 are processed in order.  The processing of each M(i)
involves 80 steps.

    Before processing any blocks, the H's are initialized as follows:
in hex,

      H0 = 67452301

      H1 = EFCDAB89

      H2 = 98BADCFE

      H3 = 10325476

      H4 = C3D2E1F0.

    Now M(1), M(2), ... , M(n) are processed.  To process M(i), we proceed as
follows:

   a. Divide M(i) into 16 words W(0), W(1), ... , W(15), where W(0) is the    
      left-most word.

   b. For t = 16 to 79 let 
          W(t) = S^1(W(t-3) XOR W(t-8) XOR W(t-14) XOR W(t-16)).

   c. Let A = H0, B = H1, C = H2, D = H3, E = H4.

   d. For t = 0 to 79 do

        TEMP = S^5(A) + f(t;B,C,D) + E + W(t) + K(t);

        E = D;  D = C;  C = S^30(B);  B = A; A = TEMP;
    
   e. Let H0 = H0 + A, H1 = H1 + B, H2 = H2 + C, H3 = H3 + D,
      H4 = H4 + E.

   After processing M(n), the message digest is the 160-bit string
represented by the 5 words

      H0 H1 H2 H3 H4.

      		   8.  ALTERNATE METHOD OF COMPUTATION

   The above assumes that the sequence W(0), ... , W(79) is implemented
as an array of eighty 32-bit words.  This is efficient from the standpoint
of minimization of execution time, since the addresses of W(t-3), ... ,W(t-16)
in step (b) are easily computed.  If space is at a premium, an alternative is
to regard { W(t) } as a circular queue, which may be implemented using an
array of sixteen 32-bit words W[0], ... W[15].  In this case, in hex let
MASK = 0000000F.  Then processing of M(i) is as follows:

   a. Divide M(i) into 16 words W[0], ... , W[15], where W[0] is the 
      left-most word.

   b. Let A = H0, B = H1, C = H2, D = H3, E = H4.

   c. For t = 0 to 79 do
        
         s = t AND MASK;

         if (t >= 16) W[s] = S^1(W[(s + 13) AND MASK] XOR W[(s + 8) AND MASK]
	 			XOR W[(s + 2) AND MASK] XOR W[s]);

         TEMP = S^5(A) + f(t;B,C,D) + E + W[s] + K(t);
  
         E = D; D = C; C = S^30(B); B = A; A = TEMP;

   d. Let H0 = H0 + A, H1 = H1 + B, H2 = H2 + C, H3 = H3 + D,
      H4 = H4 + E.

      			9. COMPARISON OF METHODS

The methods of Sections 7 and 8 yield the same message digest.  Although
using the method of Section 8 saves sixty-four 32-bit words of storage, it
is likely to lengthen execution time due to the increased complexity of the
address computations for the { W[t] } in step (c).  Other computation methods
which give identical results may be implemented in conformance with the
standard.


           APPENDIX A.  A SAMPLE MESSAGE AND ITS MESSAGE DIGEST

This appendix is for informational purposes only and is not required to meet 
the standard.

Let the message be the ASCII binary-coded form of "abc", i.e.,

       01100001  01100010  01100011.

This message has length l = 24.  In step (a) of Section 4, we append "1".  In
step (b) we append 423 "0"s.  In step (c) we append hex 00000000 00000018, 
the 2-word representation of 24.  Thus the final padded message consists of
one block, so that n = 1 in the notation of Section 4. 

The initial hex values of {Hi} are
       
H0 = 67452301

H1 = EFCDAB89

H2 = 98BADCFE

H3 = 10325476

H4 = C3D2E1F0.
           
Start processing block 1.  The words of block 1 are
       
W[0]  = 61626380
W[1]  = 00000000
W[2]  = 00000000
W[3]  = 00000000
W[4]  = 00000000
W[5]  = 00000000
W[6]  = 00000000
W[7]  = 00000000
W[8]  = 00000000
W[9]  = 00000000
W[10] = 00000000
W[11] = 00000000
W[12] = 00000000
W[13] = 00000000
W[14] = 00000000
W[15] = 00000018.
           
The hex values of A,B,C,D,E after pass t of the "for t = 0 to 79" loop 
(step (d) of Section 7 or step (c) of Section 8) are
       
            A           B           C           D           E

t =  0: 0116FC33    67452301    7BF36AE2    98BADCFE    10325476
t =  1: 8990536D    0116FC33    59D148C0    7BF36AE2    98BADCFE
t =  2: A1390F08    8990536D    C045BF0C    59D148C0    7BF36AE2
t =  3: CDD8E11B    A1390F08    626414DB    C045BF0C    59D148C0
t =  4: CFD499DE    CDD8E11B    284E43C2    626414DB    C045BF0C
t =  5: 3FC7CA40    CFD499DE    F3763846    284E43C2    626414DB
t =  6: 993E30C1    3FC7CA40    B3F52677    F3763846    284E43C2
t =  7: 9E8C07D4    993E30C1    0FF1F290    B3F52677    F3763846
t =  8: 4B6AE328    9E8C07D4    664F8C30    0FF1F290    B3F52677
t =  9: 8351F929    4B6AE328    27A301F5    664F8C30    0FF1F290
t = 10: FBDA9E89    8351F929    12DAB8CA    27A301F5    664F8C30
t = 11: 63188FE4    FBDA9E89    60D47E4A    12DAB8CA    27A301F5
t = 12: 4607B664    63188FE4    7EF6A7A2    60D47E4A    12DAB8CA
t = 13: 9128F695    4607B664    18C623F9    7EF6A7A2    60D47E4A
t = 14: 196BEE77    9128F695    1181ED99    18C623F9    7EF6A7A2
t = 15: 20BDD62F    196BEE77    644A3DA5    1181ED99    18C623F9
t = 16: 4E925823    20BDD62F    C65AFB9D    644A3DA5    1181ED99
t = 17: 82AA6728    4E925823    C82F758B    C65AFB9D    644A3DA5
t = 18: DC64901D    82AA6728    D3A49608    C82F758B    C65AFB9D
t = 19: FD9E1D7D    DC64901D    20AA99CA    D3A49608    C82F758B
t = 20: 1A37B0CA    FD9E1D7D    77192407    20AA99CA    D3A49608
t = 21: 33A23BFC    1A37B0CA    7F67875F    77192407    20AA99CA
t = 22: 21283486    33A23BFC    868DEC32    7F67875F    77192407
t = 23: D541F12D    21283486    0CE88EFF    868DEC32    7F67875F
t = 24: C7567DC6    D541F12D    884A0D21    0CE88EFF    868DEC32
t = 25: 48413BA4    C7567DC6    75507C4B    884A0D21    0CE88EFF
t = 26: BE35FBD5    48413BA4    B1D59F71    75507C4B    884A0D21
t = 27: 4AA84D97    BE35FBD5    12104EE9    B1D59F71    75507C4B
t = 28: 8370B52E    4AA84D97    6F8D7EF5    12104EE9    B1D59F71
t = 29: C5FBAF5D    8370B52E    D2AA1365    6F8D7EF5    12104EE9
t = 30: 1267B407    C5FBAF5D    A0DC2D4B    D2AA1365    6F8D7EF5
t = 31: 3B845D33    1267B407    717EEBD7    A0DC2D4B    D2AA1365
t = 32: 046FAA0A    3B845D33    C499ED01    717EEBD7    A0DC2D4B
t = 33: 2C0EBC11    046FAA0A    CEE1174C    C499ED01    717EEBD7
t = 34: 21796AD4    2C0EBC11    811BEA82    CEE1174C    C499ED01
t = 35: DCBBB0CB    21796AD4    4B03AF04    811BEA82    CEE1174C
t = 36: 0F511FD8    DCBBB0CB    085E5AB5    4B03AF04    811BEA82
t = 37: DC63973F    0F511FD8    F72EEC32    085E5AB5    4B03AF04
t = 38: 4C986405    DC63973F    03D447F6    F72EEC32    085E5AB5
t = 39: 32DE1CBA    4C986405    F718E5CF    03D447F6    F72EEC32
t = 40: FC87DEDF    32DE1CBA    53261901    F718E5CF    03D447F6
t = 41: 970A0D5C    FC87DEDF    8CB7872E    53261901    F718E5CF
t = 42: 7F193DC5    970A0D5C    FF21F7B7    8CB7872E    53261901
t = 43: EE1B1AAF    7F193DC5    25C28357    FF21F7B7    8CB7872E
t = 44: 40F28E09    EE1B1AAF    5FC64F71    25C28357    FF21F7B7
t = 45: 1C51E1F2    40F28E09    FB86C6AB    5FC64F71    25C28357
t = 46: A01B846C    1C51E1F2    503CA382    FB86C6AB    5FC64F71
t = 47: BEAD02CA    A01B846C    8714787C    503CA382    FB86C6AB
t = 48: BAF39337    BEAD02CA    2806E11B    8714787C    503CA382
t = 49: 120731C5    BAF39337    AFAB40B2    2806E11B    8714787C
t = 50: 641DB2CE    120731C5    EEBCE4CD    AFAB40B2    2806E11B
t = 51: 3847AD66    641DB2CE    4481CC71    EEBCE4CD    AFAB40B2
t = 52: E490436D    3847AD66    99076CB3    4481CC71    EEBCE4CD
t = 53: 27E9F1D8    E490436D    8E11EB59    99076CB3    4481CC71
t = 54: 7B71F76D    27E9F1D8    792410DB    8E11EB59    99076CB3
t = 55: 5E6456AF    7B71F76D    09FA7C76    792410DB    8E11EB59
t = 56: C846093F    5E6456AF    5EDC7DDB    09FA7C76    792410DB
t = 57: D262FF50    C846093F    D79915AB    5EDC7DDB    09FA7C76
t = 58: 09D785FD    D262FF50    F211824F    D79915AB    5EDC7DDB
t = 59: 3F52DE5A    09D785FD    3498BFD4    F211824F    D79915AB
t = 60: D756C147    3F52DE5A    4275E17F    3498BFD4    F211824F
t = 61: 548C9CB2    D756C147    8FD4B796    4275E17F    3498BFD4
t = 62: B66C020B    548C9CB2    F5D5B051    8FD4B796    4275E17F
t = 63: 6B61C9E1    B66C020B    9523272C    F5D5B051    8FD4B796

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -