Xin chào ! Nếu đây là lần đầu tiên bạn đến với diễn đàn, xin vui lòng danh ra một phút bấm vào đây để đăng kí và tham gia thảo luận cùng VnPro.

Announcement

Collapse
No announcement yet.

Giải thích Thuật toán MD5

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Giải thích Thuật toán MD5

    Híc. E đọc mà chẳng hiểuthuật toán này lấy đầu vào là cái nào
    nhờ các cao thủ chỉ giúp. Đây là toàn bộ các bước của thuật toán:
    Giả sử bản tin gốc có b bit.
    B1:
    Bản tin giốc đc mở rộng thêm các bit sao cho độ dài sau khi mở rộng + 64 bit nữa sẽ là bội số của 512. Quy tắc thêm là một bit "1" sẽ dc thêm vào trước và sau đó là các bit "0". Ở B1 ta có bản tin 1.

    B2:
    Một khối 64 bit đặc trưng trong b bit của bản tin 1 sẽ đc gắn vào sau bản tin 1 ta sẽ có bản tin 2 có chiều dài = bội số của 512 cũng là bội số của các từ 16 bit. Ta kí hiệu M[0,1,......,N-1] biểu thị các từ của bản tin 2 đc chia ra. N là một bội số của 16.

    B3:
    Một bộ đệm gồm 4 từ A,B,C,dc sử dụng để tính toán trích yếu bản tin, mỗi từ là một thanh ghi 32 bit, khởi tạo của các thanh ghi này là( Hexa):
    A=01 23 45 67
    B=89 ab cd ef
    C=fe dc ba 98
    D=76 54 32 10
    B4:
    Có 4 hàm phụ trợ đc sử dụng để tính toán trích yếu bản tin đc định nghĩa như sau (các hàm đều có đầu vào là 3 từ 32bit và ra là 1 từ 32 bit):
    F(x,y,z)=(x and y) or (not(x) and z)
    G(x,y,z)=(x and z) or (y and not(z))
    I(x,y,z)=y xor (x or not(z))
    H(x,y,z)=x xor y xor z

    Kết quả thu đc là 1 trích yếu bản tin từ bản tin gốc, trích yếu dài 128 bit gồm 4 từ 32 bit A,B,C,D và đc bắt đầu = byte thấp nhất của A, kết thúc = byte cao nhất của D.

    Trên đây là nguyên văn thuật toán mà mình tỉm hiểu trong 1 cuốn luận văn thạc sĩ. Híc, đọc mãi mà chẳng thấy bước nào liên quan tới bước nào cả.
    Đùng 1 cái kết luận thu đc 4 từ chảng biết đầu vào là thằng nào.......
    mong các bác tham gia góp ý bổ xung cho thuậy toán này hoàn thiện và chính xác.

  • #2
    Thanks Nguyên nhiều. nhưng có thể giải thích cặn kẽ cho mình đc ko. mình ko sành về mấy cái lập trình đó cho lắm nên đọc chỉ hiểu dc vài chỗ. với lại mình ko hiểu người ta lại chuyển vòng có ý nghĩa gểctong thuật toán này khi phải đưa mảng r[] phức tạp làm gì.
    Còn nữa, trong vòng lặp dưới đây việc gán các giá trị
    g := i
    g := (5×i + 1) mod 16
    g := (3×i + 5) mod 16
    g := (7×i) mod 16 cho mỗi hàm làm jì thế.

    for i from 0 to 63
    if 0 ≤ i ≤ 15 then
    f := (b and c) or ((not b) and d)
    g := i
    else if 16 ≤ i ≤ 31
    f := (d and b) or ((not d) and c)
    g := (5×i + 1) mod 16
    else if 32 ≤ i ≤ 47
    f := b xor c xor d
    g := (3×i + 5) mod 16
    else if 48 ≤ i ≤ 63
    f := c xor (b or (not d))
    g := (7×i) mod 16

    temp := d
    d := c
    c := b
    b := b + leftrotate((a + f + k[i] + w[g]) , r[i])
    a := temp

    Huynh có thể cho đệ biết ý nghĩa cụ thể trong mấy dòng phức tạp đó đc ko.
    Xin đa tạ huynh.

    Comment


    • #3
      Bạn ơi bạn biết rồi thì giải thích cho tớ với..... pm za hu cho tớ nhé... giúp tớ với tớ đang thi mà ko hiểu j cả.... : nguy3nc0ngmjnh_a1

      Comment

      Working...
      X