[Question] Mã hóa MD5 |
06/06/2007 10:59:39 (+0700) | #1 | 63394 |
|
phstiger
Member
|
0 |
|
|
Joined: 23/01/2007 17:47:26
Messages: 261
Offline
|
|
Bác nào biết phương pháp mã hóa MD5 giúp với. TỪng bước để mã hóa đó.? Đang cần gấp.Cảm ơn.
Luôn tiện cho hỏi cách phân biệt mã hóa 1 chiều và mã hóa 2 chiều.
Có phải mã hóa 1 chiều là: 1 string nhập vào thì trong CSDL chỉ lưu giữ giá trị băm của nó thôi. Khi ta login vào thì tương ứng với 1 string nào đó,thì string đó sẽ băm ra và so khớp với giá trị băm trên sever không vậy ?
|
|
|
|
|
[Question] Mã hóa MD5 |
06/06/2007 12:30:23 (+0700) | #2 | 63403 |
|
canh_nguyen
Elite Member
|
0 |
|
|
Joined: 23/08/2004 18:55:09
Messages: 775
Location: Broken dream
Offline
|
|
phstiger wrote:
Bác nào biết phương pháp mã hóa MD5 giúp với. TỪng bước để mã hóa đó.? Đang cần gấp.Cảm ơn.
Luôn tiện cho hỏi cách phân biệt mã hóa 1 chiều và mã hóa 2 chiều.
Có phải mã hóa 1 chiều là: 1 string nhập vào thì trong CSDL chỉ lưu giữ giá trị băm của nó thôi. Khi ta login vào thì tương ứng với 1 string nào đó,thì string đó sẽ băm ra và so khớp với giá trị băm trên sever không vậy ?
Tham khảo http://en.wikipedia.org/wiki/MD5 |
|
|
|
|
[Question] Mã hóa MD5 |
06/06/2007 14:57:14 (+0700) | #3 | 63411 |
FaL
Moderator
|
Joined: 14/04/2006 09:31:18
Messages: 1232
Offline
|
|
phstiger wrote:
Bác nào biết phương pháp mã hóa MD5 giúp với. TỪng bước để mã hóa đó.? Đang cần gấp.Cảm ơn.
Hi, bạn có thể tham khảo đường link của canh_nguyen đã đưa, hoặc có thể đọc qua bài này ở http://reaonline.net/forum/showthread.php?t=391
Hay và bổ ích!
phstiger wrote:
Luôn tiện cho hỏi cách phân biệt mã hóa 1 chiều và mã hóa 2 chiều.
Ý bạn có phải là mã hóa đối xứng và bất đối xứng? Tớ chưa nghe thuật ngữ mã hóa 2 chiều bao giờ cả. Nếu là đối xứng và bất đối xứng thì phân biệt với nhau bởi chìa khóa giải mã.
Đối xứng: Khóa và chìa khóa giải mã là 1, nghĩa là quá trình mã hóa dữ liệu (encrypt) và quá trình (Decrypt) sử dụng chung một bộ mã hóa.
Bất đối xứng: Khi khóa và chìa khóa giải mã khác nhau.
phstiger wrote:
Có phải mã hóa 1 chiều là: 1 string nhập vào thì trong CSDL chỉ lưu giữ giá trị băm của nó thôi. Khi ta login vào thì tương ứng với 1 string nào đó,thì string đó sẽ băm ra và so khớp với giá trị băm trên sever không vậy ?
Điều này tớ không dám chắc. Nhưng có thể suy luận thế này )
Decrypt hash code của MD5 dường như là điều không thể (Tại sao? )) bởi vậy nếu CSDL chỉ lưu hash thì mỗi lần cần so sánh nó lại phải decrypt ... tốn rất nhiều thời gian. => Nó lưu plaintext.
Còn trong trường hợp CSDL được show ở những trình duyệt như phpmyadmin chẳng hạn, password được show dưới dạng hash để tránh trường hợp: 1 cái nhìn thoáng qua cũng có thể biết được password )
Thuật toán mã hóa MD5 tớ cũng đang tìm. Vừa xem vài trang, chỉ có code của chính chương trình chứ chưa tìm ra thuật toán chung cụ thể. Mà những code đó viết trên 1 số ngôn ngữ tớ chưa biết hoặc ko làm việc: ASM, Delphi,... Có thời gian sẽ nghiên cứu sau vậy. (ở trang Wikipedia thuật toán "có vẻ" như được viết trên Delphi)
Thân.
|
|
Hãy giữ một trái tim nóng và một cái đầu lạnh |
|
|
|
[Question] Mã hóa MD5 |
06/06/2007 21:07:08 (+0700) | #4 | 63427 |
|
phstiger
Member
|
0 |
|
|
Joined: 23/01/2007 17:47:26
Messages: 261
Offline
|
|
Cảm ơn các Bác nhiều nhưng site: http://en.wikipedia.org/wiki/MD5 chỉ nói về MD5 căn bản và đưa ra code thôi, còn site http://reaonline.net/forum/showthread.php?t=391 cũng tương tự không nói rõ từng bước để biến string thành giá trị băm . Thứ mình muốn là input: string và các quá trình ví dụ như padding để biến string thành giá trị băm cơ. |
|
|
|
|
[Question] Mã hóa MD5 |
06/06/2007 21:51:08 (+0700) | #5 | 63431 |
|
conmale
Administrator
|
Joined: 07/05/2004 23:43:15
Messages: 9353
Location: down under
Offline
|
|
phstiger wrote:
Cảm ơn các Bác nhiều nhưng site: http://en.wikipedia.org/wiki/MD5 chỉ nói về MD5 căn bản và đưa ra code thôi, còn site http://reaonline.net/forum/showthread.php?t=391 cũng tương tự không nói rõ từng bước để biến string thành giá trị băm . Thứ mình muốn là input: string và các quá trình ví dụ như padding để biến string thành giá trị băm cơ.
Có lẽ bồ nên tham khảo RFC: http://www.faqs.org/rfcs/rfc1321 . Chú trọng 5 bước (step 1 - step 5) trong RFC này để nắm nguyên tắc append padding, append length và quá trình xử lý thông điệp.
và xem thêm nguồn ứng dụng md5 trên Javascript của Paul Johnston ở http://pajhome.org.uk/crypt/md5/md5src.html để dễ hình dung.
Tớ thấy cụm từ "mã hóa" theo tiếng Việt không đúng tinh thần "message-digest" theo tiếng Anh. Không biết tiếng Việt có từ nào khác thay vì "mã hóa" không nhỉ? |
|
What bringing us together is stronger than what pulling us apart. |
|
|
|
[Question] Mã hóa MD5 |
07/06/2007 02:54:05 (+0700) | #6 | 63455 |
|
phstiger
Member
|
0 |
|
|
Joined: 23/01/2007 17:47:26
Messages: 261
Offline
|
|
Cảm ơn Bác. Mình đã tìm được link rồi. Bài viết dịch từ http://www.faqs.org/rfcs/rfc1321 (tiếng anh) sang tiếng việt. http://www.itechpro.com.vn/index.php?option=com_content&task=view&id=65&Itemid=88
|
|
|
|
|
[Question] Mã hóa MD5 |
07/06/2007 23:58:08 (+0700) | #7 | 63580 |
|
phstiger
Member
|
0 |
|
|
Joined: 23/01/2007 17:47:26
Messages: 261
Offline
|
|
Hic mặc dù có bài viết tiếng việt nhưng đọc vẫn mủ tịt, cứ rối ung lên hết à. Liệu có ai có 1 ví dụ cụ thể 1 string nào đó và phân tích từng bước ra không vậy.... |
|
|
|
|
[Question] Mã hóa MD5 |
08/06/2007 00:03:08 (+0700) | #8 | 63583 |
|
conmale
Administrator
|
Joined: 07/05/2004 23:43:15
Messages: 9353
Location: down under
Offline
|
|
phstiger wrote:
Hic mặc dù có bài viết tiếng việt nhưng đọc vẫn mủ tịt, cứ rối ung lên hết à. Liệu có ai có 1 ví dụ cụ thể 1 string nào đó và phân tích từng bước ra không vậy....
Rối chỗ nào? Bồ tìm hiểu chủ đề này cho mục đích nào vậy? |
|
What bringing us together is stronger than what pulling us apart. |
|
|
|
[Question] Mã hóa MD5 |
08/06/2007 01:27:45 (+0700) | #9 | 63613 |
FaL
Moderator
|
Joined: 14/04/2006 09:31:18
Messages: 1232
Offline
|
|
Ví dụ cụ thể đây:
"a" -> 0cc175b9c0f1b6a831c399e269772661
Còn muốn xem từng bước thì cố gắng xem code của file kèm theo vậy!
Have fun! ) |
|
Hãy giữ một trái tim nóng và một cái đầu lạnh |
|
|
|
[Question] Mã hóa MD5 |
08/06/2007 11:32:56 (+0700) | #10 | 63716 |
|
phstiger
Member
|
0 |
|
|
Joined: 23/01/2007 17:47:26
Messages: 261
Offline
|
|
Số là mình đang làm bài báo cáo nộp cho Thầy về hash nhưng mình đã nghe nói về MD5 từ lâu rồi nhưng chưa có dịp nghiên cứu. Giờ mới có dịp.
Mình không rõ ở chỗ Bước 4: Xử lý thông điệp theo từng khối 16 word
Mỉnh cơ bản đã hiểu và làm qua các Bước 1,2,3.
Sau đây là bài ví dụ của mình qua 3 bước nhưng không biết có đúng không. Đến Bước 4 thì không biết "nó" làm thế nào nữa --> không diễn tả đựoc tiếp các bước chạy.
1. Các bit gắn thêm
Chúng ta bắt đầu bằng cách giả sử chúng ta có một tín hiệu input có chiều dài b-bit, và chúng ta muốn tìm tín hiệu md của nó . Ở đây b là một số nguyên ko dấu bất kỳ (như đã nói ở trên). Chúng ta hình dung các bits của tín hiệu input được viết như dưới sau:
m_0 m_1 … m_[b-1]
Giả sử tín hiệu input là chuổi string : "tiger"
Chúng được biểu thị bằng số hexa như sau:
Ký tự t i g e r
Hex 74 69 67 65 72
Chúng ta đều biết rằng mỗi ký tự hex = 4 bit nên
' tiger= 74 69 67 65 72 (10 charHex = 10*4 bit=40 bit)
Sau khi có được số bit của string ta sẽ tiến hành quá trình padding
-Một tín hiệu được mở rộng sao cho chiều dài của nó có dạng ( p*512+ 448 ) bits ; p trong biểu thức trên là số nguyên > hoặc =0) tức là ta thêm bit vào phía sau sao cho độ dài (tính theo bit) phải đồng dư với 448 theo modun 512.
Tức là với chuỗi "tiger" như trên ta có (p*512 + 488) này vì:
- p=0 do tín hiệu chuỗi của ta chỉ có 40 bit nên p=0 trong trường hợp ( thường thì p=0 do chuỗi nhập vào không quá 64 ký tự char)
- 488 có được là do tín hiệu là 40 bit muốn đồng dư với 448 theo biểu thức (0*512+ d ) thì d = 448+40=488
Tóm lại là để mở rộng tín hiệu chuỗi 40 bit trên ta cần padding thêm 488-40=448 bit nữa. Ta bắt đầu set các bit padding , ta sẽ set bit đầu tiên bằng 1 và các bits sau đó = 0. Chú ý số hex đầu tiên được padding có dạng bit như sau :
1000 (dạng bit)(1-charHex=4bit, bit đầu =1, 3 bit sau =0).
Vậy 1000=1*23+0*22+0*21+0*20= 8 Hex
Các số hex sau có dạng : 00
Vậy cuối cùng ta viết lại chuỗi đã padded như sau:
74 69 67 65 72 80 00 00 . . . . . 00 00 (tổng cộng có 488 bit=112 charHex)
448 bit đã padded.
2. Gắn thêm độ dài
Theo như ở bước 1 thì b là chiều dài input của chuỗi nhập vào. Ta cần đổi b ra dạng 64 bit. Và 64 bit này được sử dụng thêm vào sau cùng chuổi đã padding ở bước 1. Trong trường hợp b lớn hơn 264 thì chỉ lấy 64-bit low-order thêm vào.
Ta cần nhắc lại hiện giờ chuỗi của ta là:
74 69 67 65 72 80 00 00 . . . . . 00 00 (40bit +448 bit = 488 bit)
Vì chuỗi ban đầu là "tiger" có chiều dài chuỗi là 5 ký tự tức là b=5 nên chiều dài bit theo chuỗi là 5*8=40. Đổi sang số hex là28. Viết lại theo 2 word (64 bit) là:
00 00 00 28
Tại thời điểm này , chuổi đã padding có dạng (p*512+448+64) bit =(p*512+512) bit = 512*(p+1) bits. Vậy chiều dài bit của chuổi là một bội số của 512 bits
Vậy thêm 2 word trên vào cuối chuỗi padding ở bước 1. Ta có số hex :
74 69 67 65 72 80 00 00 . . . . . 00 00 00 00 00 28
40 bit 448 bit 64 bit
3. Khởi tạo bộ đệm MD
Một bộ đệm 4 word (A,B,C,D) được dùng để tính mã số thông điệp. Ở đây mỗi A,B,C,D là một thanh ghi 32 bit. Những thanh ghi này được khởi tạo theo những giá trị hex sau ( các byte thấp trước ) :
word A : 01 23 45 67
word B : 89 ab cd ef
word C : fe dc ba 98
word D : 76 54 32 10
4. Xử lý thông điệp theo từng khối 16 word
Ta cần định nghĩa các hàm phụ. Hàm này nhận đầu vào là 3 word 32 bit và tạo ra một word 32 bit.
F(X,Y,Z) = XY v not(X) Z
G(X,Y,Z)= XZ v Y not(Z)
H(X,Y,Z) = X xor Y xor Z
I(X,Y,Z) = Y xor (X v not(Z))
TỚI ĐÂY CHẲNG BIẾT THẾ NÀO NỮA. MONG CHỈ GIÁO
|
|
|
|
|
|