Tìm hiểu và khai thác các công cụ kẻ khóa md5, des, 3 des (autosaved)

138
1 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES Hùng -Trung Quyn- Sơ n BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC PHẠM VĂN ĐỒNG KHOA CÔNG NGHỆ THÔNG TIN ---0O0-----0O0----0O0---- ĐỀ ÁN: Môn Bảo Mật thông Tin TÌM HIỂU HỆ MÃ CHUẨN CÀI ĐẶT MD5, DES VÀ THÁM MÃ 3 VÒNG GVHD: NGUYỄN TRỌNG KHÔI SVTH: 1. NGUYỄN QUỐC HÙNG 2. VÕ TRUNG QUYỀN 3. NGUYỄN THÀNH SƠN Tháng 5 Năm 2012 MỤC LỤC

Transcript of Tìm hiểu và khai thác các công cụ kẻ khóa md5, des, 3 des (autosaved)

1 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

BỘ GIÁO DỤC VÀ ĐÀO TẠO

TRƯỜNG ĐẠI HỌC PHẠM VĂN ĐỒNG

KHOA CÔNG NGHỆ THÔNG TIN

---0O0-----0O0----0O0----

ĐỀ ÁN: Môn Bảo Mật thông Tin

TÌM HIỂU HỆ MÃ CHUẨN

CÀI ĐẶT MD5, DES VÀ THÁM MÃ 3 VÒNG

GVHD:

NGUYỄN TRỌNG KHÔI

SVTH:

1. NGUYỄN QUỐC HÙNG 2. VÕ TRUNG QUYỀN

3. NGUYỄN THÀNH SƠN

Tháng 5 Năm 2012

MỤC LỤC

2 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

TÌM HIỂU HỆ MÃ CHUẨN ........................................................................................................................ 1

1 Lời nói đầu ............................................................................................................................................ 3

2 Giới thiệu về MD5(Message-Digest algorithm) ................................................................................... 4

2.1 Giới thiệu: ..................................................................................................................... 4

2.2 Ứng dụng quan trọng: ................................................................................................... 4

2.3 Đặc điểm của MD5 ....................................................................................................... 5

3 Thuật giải .............................................................................................................................................. 6

3.1 Đầu vào và đầu ra ......................................................................................................... 6

3.1.1 Đầu vào: ................................................................................................................................ 6

3.1.2 Đầu ra: ................................................................................................................................... 6

3.2 Giải thuật ....................................................................................................................... 8

4 Bẻ khóa MD5( những lỗ hổng của MD5) ........................................................................................... 14

4.1 I Những Lỗ Hổng ........................................................................................................ 14

I. LAÄP MAÕ DES ............................................................................................................. 16

II. THAÙM MAÕ DES ........................................................................................................ 22

1. Thaùm maõ heä DES - 3 voøng ................................................................................................ 28

2. Thaùm maõ heä DES 6-voøng .................................................................................................. 34

3 Caùc thaùm maõ vi sai khaùc .................................................................................................... 41

1. HEÄ MAÕ DES 3 VOØNG .......................................................................................... 41

2. Giao Dieän ( Package GiaoDien). .............................................................................. 41

3 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

TÌM HỂU VÀ KHAI THÁC CÔNG CỤ KẺ KHÓA MD5, DES, 3DES

1 Lời nói đầu

Trước khi các bạn tạo một chương trình bẻ khóa nhằm vào số serial của

chương trình (còn gọi là keygen), ngoài việc biết code bằng một ngôn ngữ lập trình

nào đó, các bạn nên học qua các thuật toán mã hóa. Vì việc học cho tốt ngôn ngữ

lập trình chưa chắc các bạn đã tạo được một keygen. Luyện đọc code cho tốt là một

việc nên làm, nhưng chưa chắc bạn đã nắm hết ý nghĩa của đoạn code đó. Vì các

phần mềm mới sau này họ dùng các cách mã hóa làm phức tạp quá trình bẻ khóa.

Khi ta không nắm vững một số thuật toán mã hóa, thì dù bạn có thiệt là giỏi, bạn

cũng mất nhiều thòi gian để bẻ khóa. Nhưng nếu bạn nắm vững được thuật toán mã

hóa của nó thì “chuyện nhỏ”.

Học thuật toán chúng ta sẽ học được rất nhiều điều. Nó giống như việc học

bảng cửu chương vậy. Chúng ta phải học thuộc các loại thuật toán mã hóa, quen

với nó, thấy nó làm việc, thân thiết với nó để khi gặp nó, hay “hậu duệ” của nó

hoặc cái gì đó gần giống nó chúng ta sẽ không phải bỡ ngỡ.

Mỗi người chúng ta đều có một dấu vân tay riêng, không ai giống ai. Chính tạo

hóa đã tạo ra chúng, từ những ý tưởng đó, con người mới nghĩ ra việc: tại sao

chúng ta không tự tạo ra một “dấu vân tay” cho một cái gì đó để phân biệt chúng

với nhau. Ví dụ như tên người chẳng hạn (tên là chuỗi các kí tự được gọi là String).

Do vậy trong lĩnh vực công nghệ thông tin người ta bắt đầu nghiên cứu các cách để

tạo ra “dấu vân tay” cho các chuỗi String. Một trong những cách đó là thuật toán

4 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

MD5 mà chúng tôi sẽ nói ở dưới đây.

“dấu vân tay” do thuật toán MD5 tạo ra từ một String gọi là message digest

(gọi tắt là md) hay còn gọi là “MD5 hashes” (gọi tắt là hashes)

Bản báo cáo này chỉ tìm hiểu cách thực hiện của MD5, nguyên lý cũng như

thuật toán cụ thể. Từ đó giúp chúng ta nhận dạng ra các chương trình sử dụng MD5

. Giờ chúng ta bắt đầu tìm hiểu về MD5

2 Giới thiệu về MD5(Message-Digest algorithm)

2.1 Giới thiệu:

Từ ý tưởng mỗi người có một dấu vân tay riêng để phân biệt mọi người với nhau Ronald Rivest đã tạo ra MD5 như một công nghệ tạo dấu vân tay(fingerprint) cho 1 cái gì đó(văn bản,password…)để phân biệt chúng với nhau. -MD5 (Message-Digest algorithm 5) là một hàm băm để mã hóa với giá trị băm

là 128bit. Từng được xem là một chuẩn trên Internet, MD5 đã được sử dụng rộng rãi trong các chương trình an ninh mạng, và cũng thường được dùng để kiểm tra tính nguyên vẹn của tập tin.

MD5 được thiết kế bởi Ronald Rivest vào năm 1991 để thay thế cho hàm băm trước đó, MD4 (cũng do ông thiết kế, trước đó nữa là MD2).

2.2 Ứng dụng quan trọng: 1/ MD5 được sử dụng rộng rải trong thế giới phần mềm để đảm bảo rằng tập

tin tải về không bị hỏng. Người sử dụng có thể so sánh giữa thông số kiểm tra

phần mềm bằng MD5 được công bố với thông số kiểm tra phần mềm tải về bằng

MD5.(ví dụ:khi người sư dụng download một file trên mạng nhà phát triển ứng

dụng sẽ tạo ra một mã MD5 cho file đó.khi chúng ta vừa tải về thì sẽ có một mã

MD5.nếu 2 mã này trùng nhau thì file đó an toàn ngược lại thì có thể file download

5 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

có virut hoặc cái gì đó)Hệ điều hành Unix sử dụng MD5 để kiểm tra các gói mà

nó phân phối, trong khi hệ điều hành Windows sử dụng phần mềm của hãng thứ

ba. 2/ MD5 được dùng để mã hóa mật khẩu. Mục đích của việc mã hóa này là biến

đổi một chuổi mật khẩu thành một đoạn mã khác, sao cho từ đoạn mã đó

không thể nào lần trở lại mật khẩu. Có nghĩa là việc giải mã là không thể hoặc

phải mất một khoãng thời gian vô tận (đủ để làm nản lòng các hacker)

2.3 Đặc điểm của MD5

- Từ một đoạn văn bản đầu vào sẽ tạo ra một string gọi là Message Degist

Hay còn gọi là MD5 hash có độ dài cố định được mã hóa dưới dạng hexa.

-Từ một đọan văn bản đầu vào sẽ tạo ra duy nhất một hash đầu ra không bao giờ

có 2 hash cho 1 văn bản.

- Từ một hash đầu ra ta sẽ không bao giờ có thể suy ngược lại được plantext ban

đầu

6 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

3 Thuật giải

3.1 Đầu vào và đầu ra

3.1.1 Đầu vào:

-Thông điệp đưa vào sẻ được cắt thành các khối 512 bits. Thông điệp được đưa vào bộ đệm để chiều dài của nó sẽ chia hết cho 512. Bộ đệm hoạt động như sau: +Trước tiên nó sẽ chèn bit 1 vào cuối thông điệp.

+Tiếp đó là hàng loạt bit Zero cho tới khi chiều dài của nó nhỏ hơn bội số của

512 một khoảng 64 bit .

+Phần còn lại sẻ được lấp đầy bởi một số nguyên 64 bit biểu diển chiều dài

ban đầu của thông điệp.

3.1.2 Đầu ra:

7 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

-MD5 biến đổi một thông điệp có chiều dài bất kì thành một khối có kích thước cố định 128 bits.

8 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

3.2 Giải thuật

Thuật toán chính của MD5 hoạt động trên một bộ 128 bit. Chia nhỏ nó ra

thành 4 từ 32 bit, kí hiệu là A,B,C và D. Các giá trị này là các hằng số cố

định.

Sau đó thuật toán chính sẻ luân phiên hoạt động trên các khối 512 bit. Mỗi

khối sẽ phối hợp với một bộ. Quá trình xữ lý một khối thông điệp bao gồm 4

bước tương tự nhau, gọi là vòng (“round”). Mỗi vòng lại gồm 16 quá trình

tương tự nhau dựa trên hàm một chiều F, phép cộng module và phép xoay

trái… Hình bên dưới mô tả một quá trình trong một vòng

9 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

Quá trình xử lý của một block

10 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

Có 4 hàm một chiều F có thể sử dụng. Mỗi vòng sử dụng một hàm khác nhau.

Đây là quá trình thực hiện xử lý của 4 hàm F, G, H, I ở trên:

Vòng 1 (Round 1):

Ký hiệu [abcd k s t] là bước thực hiện của phép toán

a = b + ((a + F(b, c, d) + X[k] + T[t]) <<< s) Quá trình thực hiện 16 bước

sau:

[ABCD 0 7 1] [DABC 1 12 2] [CDAB 2 17 3] [BCDA 3 22 4]

[ABCD 4 7 5] [DABC 5 12 6] [CDAB 6 17 7] [BCDA 7 22 8]

[ABCD 8 7 9] [DABC 9 12 10] [CDAB 10 17 11] [BCDA 11 22 12]

[ABCD 12 7 13] [DABC 13 12 14] [CDAB 14 17 15] [BCDA 15 22 16]

Giải thích:

Ví dụ biểu thức thứ 2 là [DABC 1 12 2], tương đương với:

D = A + ((D + F(A,B,C) + X[1] + T[2]) <<< 12) Nhận xét: Vòng 1 dùng hàm

F, Với giá trị t từ 1 -> 16 và k từ 1 -> 15

Vòng 2 (Round 2):

Tương tự, ký hiệu [abcd k s t] là của biểu thức :

a = b + ((a + G(b, c, d) + X[k] + T[t]) <<< s) Quá trình thực hiện 16 bước :

[ABCD 1 5 17] [DABC 6 9 18] [CDAB 11 14 19] [BCDA 0 20 20]

[ABCD 5 5 21] [DABC 10 9 22] [CDAB 15 14 23] [BCDA 4 20 24]

11 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

[ABCD 9 5 25] [DABC 14 9 26] [CDAB 3 14 27] [BCDA 8 20 28]

[ABCD 13 5 29] [DABC 2 9 30] [CDAB 7 14 31] [BCDA 12 20 32]

Nhận xét: Vòng 2 dùng hàm G, với t từ 17 -> 32 và k = 1 + 5k mod 16

Vòng 3 (Round 3):

Tương tự, ký hiệu [abcd k s t] là của biểu thức :

a = b + ((a + H(b, c, d) + X[k] + T[t]) <<< s) Quá trình thực hiện 16 bước:

[ABCD 5 4 33] [DABC 8 11 34] [CDAB 1 16 35] [BCDA 14 23 36]

[ABCD 1 4 37] [DABC 4 11 38] [CDAB 7 16 39] [BCDA 10 23 40]

[ABCD 13 4 41] [DABC 0 11 42] [CDAB 3 16 43] [BCDA 6 23 44]

[ABCD 9 4 45] [DABC 12 11 46] [CDAB 5 16 47] [BCDA 2 23 48]

Nhận xét: Vòng 3 dùng hàm H, với t từ 33 -> 48 và k =5 + 3k mod 16

Vòng 4(Round 4):

Tương tự, ký hiệu [abcd k s t] là của biểu thức:

a = b + ((a + I(b,c,d) + X[k] + T[t]) <<< s) Quá trình thực hiện 16 bước :

[ABCD 0 6 49] [DABC 7 10 50] [CDAB 14 15 51] [BCDA 5 21 52]

[ABCD 12 6 53] [DABC 3 10 54] [CDAB 10 15 55] [BCDA 1 21 56]

[ABCD 8 6 57] [DABC 15 10 58] [CDAB 6 15 59] [BCDA 13 21 60]

[ABCDb 4 6 61] [DABC 11 10 62] [CDAB 2 15 63] [BCDA 9 21 64]

Nhận xét: Vòng 4 dùng hàm I, với t từ 49 -> 64 và k =7k mod 16

/* Sau đó làm các phép cộng sau. ( Nghĩa là cộng vào mỗi thanh ghi giá trị của

nó trước khi vào vòng lặp xử lý block tiếp theo) */

12 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

A = A + AA

B = B + BB

C = C + CC

D = D + DD

End /* of loop on i */

Bước 5 : Tính kết quả message digest. Sau khi thực hiện xong bước 4, thông

điệp thu gọn nhận được từ 4 thanh ghi A, B, C, D, bắt đầu từ byte thấp của

thanh ghi A và kết thúc với byte cao của thanh ghi D bằng phép nối như sau:

Message Digest = A || B || C || D. ( || phép toán nối)

Hàm băm MD5 ( còn được gọi là hàm tóm tắt thông điệp – masage degests) sẽ trả về một chuổi số thập lục phân gồm 32 số liên tiếp. Dưới đây là các ví dụ mô tả các kết quả thu được sau khi băm.

MD5("The quick brown fox jumps over the lazy dog") =

9e107d9d372bb6826bd81d3542a419d6

13 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

Chỉ cần một thay đổi nhỏ cũng làm thay đổi hoàn toàn chuỗi đầu ra MD5("The quick brown fox jumps over the lazy

cog") = 1055d3e698d289f2af8663725127bd4b

Ngay cả một chuổi rổng cũng cho ra một kết quả phức tạp:

MD5("") = d41d8cd98f00b204e9800998ecf8427e

Mã hóa bằng giải thuật MD5

private string EncodeMD5(string pass)

{

MD5CryptoServiceProvider md5 = new

MD5CryptoServiceProvider();

byte[] bs =

System.Text.Encoding.UTF8.GetBytes(pass);

bs = md5.ComputeHash(bs);

System.Text.StringBuilder s = new

System.Text.StringBuilder();

foreach (byte b in bs)

{

s.Append(b.ToString("x1").ToLower());

}

pass = s.ToString();

return pass;

14 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

}

4 Bẻ khóa MD5( những lỗ hổng của MD5)

4.1 I Những Lỗ Hổng

Bất cứ thuật toán mã hóa nào rồi cũng bị giải mã. Với MD5, ngay từ

năm 1996, người ta đã tìm thấy lỗ hổng của nó. Mặc dù lúc đó còn chưa rõ

ràng lắm nhưng các chuyên gia mã hóa đã nghĩ đến việc phải đưa ra một

thuật giải khác, như là SHA-1…

MD5 được thiết kế bởi Ron Rivet. Từ khi thuật toán này được công bố đã

có một số điểm yếu đã được tìm thấy năm 1993 B.den Boer and A.

Bosselaers đã tìm ra một sự va chạm của MD5 và từ đó một loạt các điểm

yếu của MD5 đã được tìm ra

Mọi chuyện bắt đầu từ khi nhà khoa học máy tính người Pháp Antoine Joux phát hiện ra một lỗ hổng trong thuật toán phổ biến MD5, thường dùng trong công nghệ chữ ký điện tử. Ngay sau đó, bốn nhà nghiên cứu người Trung Quốc lại phát hành công trình nghiên cứu chỉ ra cách xuyên phá thuật toán thứ hai có tên SHA-0. Tuy chỉ mới ở giai đoạn nghiên cứu sơ bộ song những phát hiện này có thể

tạo điều kiện để kẻ xấu cài những chương trình cửa sau (backdoor) bí mật vào

trong mã máy tính, hoặc giả mạo chữ ký điện tử. Trừ phi một thuật toán mới,

bảo mật hơn được xây dựng và đưa vào sử dụng! Một phát hiện thứ ba, được đón đợi và đánh giá rất cao được công bố trong hội thảo Crypto. Hai nhà nghiên cứu Eli Biham và Rafi Chen của Viện Công nghệ Israel đã diễn thuyết về cách nhận dạng các hình thức tấn công vào chức năng bảo mật của thuật toán SHA-0, một thuật toán có sơ hở.

Những lỗ hổng bảo mật được cho là "nghiêm trọng" bên trong thuật toán

SHA-0 và SHA-1, tuỳ thuộc vào mức độ chi tiết của phần trình bày, có thể

làm chấn động cả ngành bảo mật. Từ trước tới nay, SHA-1 vẫn được coi là

15 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

chuẩn mực "vàng"về thuật toán. Nó được tích hợp bên trong rất nhiều chương

trình thông dụng như PGP và SSL, được chứng thực bởi Viện Chuẩn Công

nghệ Quốc gia và là thuật toán chữ ký điện tử duy nhất được Cơ quan Chuẩn

Chữ ký Số của chính phủ Mỹ phê chuẩn. Cả ba thuật toán MD5, SHA-0 và SHA-1 đều được giới khoa học máy tính

coi là"đa chức năng". Chúng có thể nhận mọi dạng dữ liệu đầu vào, từ tin

nhắn email cho đến hạt nhân (kernel) của hệ điều hành, cũng như tạo ra một

dấu vân tay số duy nhất. Chỉ thay đổi một ký tự bất kỳ bên trong file đầu vào

cũng tạo ra những dấu vân tay hoàn toàn khác nhau. Các ứng dụng bảo mật

đều dựa vào tính năng "dấu vân tay duy nhất" này làm nền. Tuy nhiên, nếu kẻ

tấn công có thể tạo ra một dấu vân tay "Dolly" với một dòng dữ liệu đầu vào

khác, dấu vân tay "sinh sản vô tính" này sẽ khiến phần mềm bị gài backdoor

nhận dạng nhầm. Kết quả là chúng có thể tạo ra chữ ký giả để vét sạch tài

khoản ngân hàng của người sử dụng không may. Tất nhiên, từ rất lâu, giới nghiên cứu đã hiểu rằng không có thuật toán mã hoá thực tiễn nào là tuyệt đối an toàn và bảo mật. Tuy vậy, họ vẫn nỗ lực thiết kế ra những thuật toán mà thời gian cần để tạo ra một dấu vân tay "Dolly" là vô tận, với hy vọng kẻ tấn công sẽ nản lòng. Thế nhưng nếu những sơ hở tương tự như của SHA-0 cũng được tìm thấy trong SHA-1, điều này đồng nghĩa với việc tốc độ giả mạo một dấu vân tay sẽ được đẩy nhanh lên... 500 triệu lần, hoàn toàn trong tầm tay của một mạng máy tính tốc độ cao.

Tuy mức độ tác hại ít trầm trọng hơn song sơ hở bảo mật trong thuật toán

MD5 có lẽ lại gây hậu quả ngay tức thì. Sản phẩm máy chủ Apache Web

nguồn mở đang sử dụng MD5 để kiểm duyệt những website có mã nguồn chưa

bị chỉnh sửa, từ đó sẽ an toàn khi chạy trong máy. Tương tự, sẽ là cơ sở dữ liệu

Solaris của Sun Microsystems, với khả năng mà theo hãng tự nhận là "xác

minh một file đích thực chứ không phải phiên bản bị điều chỉnh để hạ gục hệ

thông bảo mật''. Lỗ hổng mới phát hiện trong MD5 sẽ cho phép kẻ tấn công tạo ra file

giả mạo chỉ trong vài giờ với một máy tính đạt chuẩn. "Giờ đây, người ta đã

chứng minh được các thuật toán này có lỗ hổng. Trước khi kẻ tấn công lợi

dụng khai thác được, đã đến lúc phải thôi dần việc sử dụng MD5.'' - nhà

phân tích Hughes của Viện Chuẩn Công nghệ Quốc gia nhận định.

16 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

I. LAÄP MAÕ DES

Ñaây laø ví duï veà vieäc laäp maõ söû duïng DES. Giaû söû ta maõ hoùa

baûn roõ sau trong daïng thaäp luïc phaân (Hexadecimal)

0123456789ABCDEF

söû duïng khoùa thaäp luïc phaân

133457799BBCDFF1

Khoùa trong daïng nhò phaân khoâng coù caùc bit kieåm tra seõ laø:

00010010011010010101101111001001101101111011011111111000.

Aùp duïng IP, ta nhaän ñöôïc L0 vaø R0 (trong daïng nhò phaân) :

L0

L1 = R0

=

=

110011000000000011001100111111

11

111100001010101011110000101010

10

16 voøng laäp maõ ñöôïc theå hieän nhö sau:

E(R0)

K1

E(R0) K1

Output S-

hoäp

f(R0,K1)

L2 = R1

=

=

=

=

=

=

011110100001010101010101011110100001010101010

101

000110110000001011101111111111000111000001110

010

011000010001011110111010100001100110010100100

111

01011100100000101011010110010111

00100011010010101010100110111011

11101111010010100110010101000100

17 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

E(R1)

K2

E(R1) K2

Output S-hoäp

f(R1, K2)

L3 = R2

=

=

=

=

=

=

01110101111010100101010000110000101010100000

1001

01111001101011101101100111011011110010011110

0101

00001100010001001000110111101011011000111110

1100

11111000110100000011101010101110

00111100101010111000011110100011

11001100000000010111011100001001

E(R2)

K3

E(R2) K3

S-box

output

f(R2, K3)

L4 = R3

=

=

=

=

=

=

11100101100000000000001010111010111010000101001

1

01010101111111001000101001000010110011111001100

1

10110000011111001000100011111000001001111100101

0

00100111000100001110000101101111

01001101000101100110111010110000

10100010010111000000101111110100

E(R3)

K4

E(R3) K4

S-box

output

f(R3, K4)

=

=

=

=

=

=

01010000010000101111100000000101011111111010100

1

01110010101011011101011011011011001101010001110

1

00100010111011110010111011011110010010101011010

0

00100001111011011001111100111010

18 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

L5 = R4 10111011001000110111011101001100

011101110

E(R4)

K5

E(R4) K5

Xuaát S-

hoäp

f(R4, K5)

L6 = R5

=

=

=

=

=

=

10111010111010010000010000000000000000100000101

0

01111100111011000000011111101011010100111010100

0

11000110000001010000001111101011010100011010001

0

01010000110010000011000111101011

00101000000100111010110111000011

10001010010011111010011000110111

E(R5)

K6

E(R5) K6

S-box

output

f(R5, K6)

L7 = R6

=

=

=

=

=

=

11000101010000100101111111010000110000011010111

1

01100011101001010011111001010000011110110010111

1

10100110111001110110000110000000101110101000000

0

01000001111100110100110000111101

10011110010001011100110100101100

11101001011001111100110101101001

E(R6)

K7

E(R6) K7

=

=

=

111101010010101100001111111001011010101101010011

111011001000010010110111111101100001100010111100

000110011010111110111000000100111011001111101111

19 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

S-box

output

f(R6, K7)

L8 = R7

=

=

=

00010000011101010100000010101101

10001100000001010001110000100111

00000110010010101011101000010000

E(R7)

K8

E(R7) K8

S-box

output

f(R7, K8)

L9 = R8

=

=

=

=

=

=

0000000011000010010101010101111101000000101000

00

1111011110001010001110101100000100111011111110

11

1111011101001000011011111001111001111011010110

11

01101100000110000111110010101110

00111100000011101000011011111001

11010101011010010100101110010000

E(R8)

K9

E(R8) K9

S-box

output

f(R8, K9)

L10 = R9

=

=

=

=

=

=

01101010101010110101001010100101011111001010000

1

11100000110110111110101111101101111001111000000

1

10001010011100001011100101001000100110110010000

0

00010001000011000101011101110111

00100010001101100111110001101010

00100100011111001100011001111010

E(R9) = 00010000100000111111100101100000110000111111010

20 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

K10

E(R9) K10

S-box

output

f(R9, K10)

L11 = R10

=

=

=

=

=

0

10110001111100110100011110111010010001100100111

1

10100001011100001011111011011010100001011011101

1

11011010000001000101001001110101

01100010101111001001110000100010

10110111110101011101011110110010

E(R10)

K11

E(R10) K11

S-box

output

f(R10, K11)

L12 = R11

=

=

=

=

=

=

01011010111111101010101111101010111111011010010

1

00100001010111111101001111011110110100111000011

0

01111011101000010111100000110100001011100010001

1

01110011000001011101000100000001

11100001000001001111101000000010

11000101011110000011110001111000

E(R11)

K12

E(R11) K12

S-box

output

f(R11, K12)

L13 = R12

01100000101010111111000000011111100000111111000

1

01110101011100011111010110010100011001111110100

1

00010101110110100000010110001011111001000001100

0

01111011100010110010011000110101

11000010011010001100111111101010

01110101101111010001100001011000

21 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

E(R12)

K13

E(R12) K13

S-box

output

f(R12, K13)

L14 = R13

=

=

=

=

=

=

00111010101111011111101010001111000000101111000

0

10010111110001011101000111111010101110100100000

1

10101101011110000010101101110101101110001011000

1

10011010110100011000101101001111

11011101101110110010100100100010

00011000110000110001010101011010

E(R13)

K14

E(R13) K14

S-box

output

f(R13, K14)

L15 = R14

=

=

=

=

=

=

00001111000101100000011010001010101010101111010

0

01011111010000111011011111110010111001110011101

0

01010000010101011011000101111000010011011100111

0

01100100011110011001101011110001

10110111001100011000111001010101

11000010100011001001011000001101

E(R14)

K15

E(R14) K15

S-box

output

=

=

=

=

=

11100000010101000101100101001010110000000101101

1

10111111100100011000110100111101001111110000101

0

01011111110001011101010001110111111111110101000

1

22 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

f(R14, K15)

L16 = R15

= 10110010111010001000110100111100

01011011100000010010011101101110

01000011010000100011001000110100

E(R15)

K16

E(R15) K16

S-box

output

f(R15, K16)

R16

=

=

=

=

=

=

00100000011010100000010000011010010000011010100

0

11001011001111011000101100001110000101111111010

1

11101011010101111000111100010100010101100101110

1

10100111100000110010010000101001

11001000110000000100111110011000

00001010010011001101100110010101

Cuoái cuøng, aùp duïng IP-1 cho R16L16 ta nhaän ñöôïc baûn maõ trong

daïng thaäp luïc phaân nhö sau:

85E813540F0AB405

II. THAÙM MAÕ DES

Moät phöông phaùp raát noåi tieáng trong thaùm maõ DES laø “thaùm maõ vi sai“ (differential cryptanalysic) do Biham vaø Shamir ñeà xuaát. Ñoù laø phöông phaùp thaùm vôùi baûn roõ ñöôïc choïn. Noù khoâng ñöôïc söû duïng trong thöïc teá ñeå thaùm maõ DES 16 voøng, maø chæ ñöôïc söû duïng ñeå thaùm caùc heä DES coù ít voøng hôn.

Baây giôø ta seõ moâ taû nhöõng yù töôûng cô baûn cuûa kyõ thuaät naøy.

Ñeå ñaït muïc ñích thaùm maõ, ta coù theå boû qua hoaùn vò khôûi taïo IP vaø

hoaùn vò ñaûo cuûa noù (bôûi vì ñieàu ñoù khoâng caàn thieát cho vieäc thaùm

maõ). Nhö ñaõ nhaän xeùt ôû treân, ta xeùt caùc heä DES n voøng, vôùi n 16.

Trong caøi ñaët ta coù theå coi L0R0 laø baûn roõ vaø LnRn nhö laø baûn maõ.

23 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

Thaùm maõ vi sai ñoøi hoûi phaûi so saùnh x-or (exclusive-or) cuûa hai

baûn roõ vôùi x-or cuûa hai baûn maõ töông öùng. Noùi chung, ta seõ quan saùt

hai baûn roõ L0R0 vaø L0*R0

* vôùi trò x-or ñöôïc ñaëc taû L0‟R0‟ = L0R0 L0*R0

*.

Trong nhöõng thaûo luaän sau ta seõ söû duïng kyù hieäu („) ñeå chæ x-or cuûa

hai xaâu bit.

Ñònh nghóa 3.1: Cho Sj laø moät S-hoäp (1 j 8). Xeùt moät caëp xaâu

6-bit laø (Bj,Bj* ). Ta noùi raèng, xaâu nhaäp x-or (cuûa Sj) laø Bj Bj

* vaø xaâu

xuaát x-or (cuûa Sj) laø Sj(Bj) Sj(Bj*).

Chuù yù laø xaâu nhaäp x-or laø xaâu bit coù ñoä daøi 6, coøn xaâu xuaát x-or coù ñoä daøi 4.

Ñònh nghóa 3.2: Vôùi baát kyø Bj ‟ (Z2) 6, ta ñònh nghóa taäp (Bj‟) goàm

caùc caëp (Bj,Bj*) coù x-or nhaäp laø Bj‟.

Deã daøng thaáy raèng, baát kyø taäp (Bj‟) naøo cuõng coù 26 = 64 caëp,

vaø do ñoù

(Bj‟) = {(Bj, Bj Bj‟) : Bj (Z2) 6 }

Vôùi moãi caëp trong (Bj‟), ta coù theå tính xaâu x-or xuaát cuûa Sj vaø

laäp ñöôïc phaân boá keát quaû. Coù 64 xaâu xuaát x-or, ñöôïc phaân boá trong 24

= 16 giaù trò coù theå coù. Tính khoâng ñoàng ñeàu cuûa caùc phaân boá ñoù laø

cô sôû ñeå maõ thaùm.

Ví duï 3.1: Giaû söû ta xeùt S1 laø S-hoäp ñaàu tieân vaø xaâu nhaäp x-or

laø 110100. Khi ñoù

(110100) = {(000000, 110100), (000001, 110101), ..., (111111, 001011)}

Vôùi moãi caëp trong taäp (110100), ta tính xaâu xuaát x-or cuûa S1.

Chaúng haïn,

S1(000000) = E16 = 1110, S1(110100) = 1001,

nhö vaäy xaâu xuaát x-or cho caëp (000000,110100) laø 0111.

Neáu thöïc hieän ñieàu ñoù cho 64 caëp trong (110100) thì ta nhaän ñöôïc phaân boá cuûa caùc xaâu x-or xuaát sau:

24 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

000

0

000

1

001

0

001

1

010

0

010

1

011

0

011

1

100

0

100

1

101

0

101

1

110

0

110

1

111

0

111

1

0 8 16 6 2 0 0 12 6 0 0 0 0 8 0 6

Trong ví duï 3.1, chæ coù 8 trong soá 16 xaâu x-or xuaát coù theå coù xuaát

hieän thaät söï. Ví duï cuï theå naøy ñaõ chæ ra söï phaân boá raát khoâng ñeàu

cuûa caùc xaâu x-or xuaát. Noùi chung, neáu ta coá ñònh S-hoäp Sj vaø xaâu

nhaäp x-or Bj‟, thì trung bình coù khoaûng 75 - 80% caùc xaâu x-or xuaát coù theå

coù xuaát hieän thöïc söï.

Ñeå moâ taû caùc phaân boâ ñoù ta ñöa ra ñònh nghóa sau.

Ñònh nghóa 3.3: Vôùi 1 j 8 vaø vôùi caùc xaâu bit Bj‟ ñoä daøi 6 vaø Cj‟

ñoä daøi 4, ta ñònh nghóa:

INj(Bj‟,Cj‟) = {Bj (Z2)6 : Sj(Bj) Sj(Bj Bj‟) = Cj‟}

vaø

Nj(Bj‟, Cj‟) = INj(Bj‟, Cj‟)

Baûng sau seõ cho caùc xaâu nhaäp coù theå coù vôùi xaâu x-or nhaäp

110100

Xaâu xuaát x-

or

Caùc xaâu nhaäp coù theå coù

0000

0001 000011, 001111, 011110,

011111

101010, 101011, 110111,

111011

25 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

0010

000100, 000101, 001110,

010001

010010, 010100, 011010,

011011

100000, 100101, 010110,

101110

101111, 110000, 110001,

111010

0011 000001, 000010, 010101,

100001

110101, 110110

0100 010011, 100111

0101

0110

0111

000000, 001000, 001101,

010111

011000, 011101, 100011,

101001

101100, 110100, 111001,

111100

1000 001001, 001100, 011001,

101101

111000, 111101

1001

1010

1011

1100

26 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

1101 000110, 010000, 010110,

011100

110010, 100100, 101000,

110010

1110

1111 000111, 001010, 001011,

110011

111110, 111111

Nj(Bj‟, Cj‟) tính soá caùc caëp vôùi xaâu nhaäp x-or baèng Bj‟ coù xaâu xuaát

x-or baèng Cj‟ vôùi S-hoäp Sj. Caùc caëp ñoù coù caùc xaâu nhaäp x-or ñöôïc

ñaëc taû vaø ñöa ra caùch tính caùc xaâu xuaát x-or coù theå nhaän ñöôïc töø

taäp INj(Bj‟, Cj‟). Ñeå yù raèng, taäp naøy coù theå phaân thaønh Nj(Bj‟, Cj‟) /2

caëp, moãi caëp coù xaâu x-or nhaäp baèng Bj‟.

Phaân boá trong ví duï 3.1 chöùa caùc trò N1(110100, C1‟), C1‟ (Z2)4.

Trong baûng treân chöùa caùc taäp IN(110100, C1‟).

Vôùi moãi taùm S-hoäp, coù 64 xaâu nhaäp x-or coù theå coù. Nhö vaäy,

coù 512 phaân boá coù theå tính ñöôïc. Nhaéc laïi laø, xaâu nhaäp cho S-hoäp ôû

voøng thöù i laø B= E J, vôùi E = E(Ri-1) laø môû roäng cuûa Ri-1 vaø J = Ki

goàm caùc bit khoùa cuûa voøng i. Baây giôø xaâu nhaäp x-or (cho taát caû taùm

S-hoäp) coù theå tính ñöôïc nhö sau:

B B* = (E J) (E* J) = E E*

Ñieàu naøy raát quan troïng ñeå thaáy raèng, xaâu nhaäp x-or khoâng phuï

thuoäc vaøo caùc bit khoùa J. (Do ñoù, xaâu xuaát x-or cuõng khoâng phuï thuoäc

vaøo caùc bit khoùa.)

Ta seõ vieát moãi B, E vaø J nhö laø noái cuûa taùm xaâu 6-bit:

B = B1B2B3B4B5B6B7B8

E = E1E2E3E4E5E6E7E8

J = J1J2J3J4J5J6J7J8

27 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

vaø ta cuõng seõ vieát B* vaø E* nhö vaäy. Baây giôø giaû söû laø ta ñaõ bieát

caùc trò Ej vaø Ej* vôùi moät j naøo ñoù, 1 j 8, vaø trò cuûa xaâu xuaát x-or cho

Sj, Cj‟ = Sj(Bj) Sj(Bj* ). Khi ñoù seõ laø:

Ej Jj INj(Ej‟, Cj‟),

vôùi Ej‟ = Ej Ej*.

Ñònh nghóa 3.4: Giaû söû Ej vaø Ej* laø caùc xaâu bit ñoä daøi 6, vaø Cj’ laø

xaâu bit ñoä daøi 4. Ta ñònh nghóa:

testj(Ej, Ej*, Cj’) = { Bj Ej : Bj INj(Ej’, Cj’) },

vôùi Ej’ = Ej Ej*.

Ñònh lyù 3.1:

Giaû söû Ej vaø Ej* laø hai xaâu nhaäp cho S-hoäp Sj, vaø xaâu xuaát x-or

cho Sj laø Cj’. Kyù hieäu Ej’ = Ej Ej* . Khi ñoù caùc bit khoùa Jj coù trong taäp

testj(Ej, Ej*, Cj’).

Ñeå yù, ñoù chính laø caùc xaâu bit Nj(Ej‟, Cj‟) ñoä daøi 6 trong taäp testj(Ej,

Ej*, Cj‟); giaù trò chính xaùc cuûa Jj phaûi laø moät trong soá ñoù.

Ví duï 3.2:

Giaû söû E1 = 000001, E1*= 110101 vaø C1‟= 1101. Do ñoù N1(110101,1101) = 8,

ñuùng baèng 8 xaâu bit trong taäp test1(000001, 110101, 1101). Töø baûng treân

ta thaáy raèng

IN1(110100, 1101) = {000110, 010000, 010110, 011100, 100010, 100100, 101000,

110010}

Cho neân

test1(000001, 110101,1101) = {000111, 010001, 010111, 011101, 100011, 100101,

101001, 110011}

Neáu ta coù moät boä ba thöù hai nhö theá E1, E1*, C1‟, khi ñoù ta seõ

nhaän ñöôïc taäp thöù hai test1 cuûa caùc trò cho caùc bit khoùa trong J1. Trò

28 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

ñuùng cuûa J1 caàn phaûi naèm trong giao cuûa caùc S-hoäp. Neáu ta coù moät

vaøi boä ba nhö vaäy, khi ñoù ta coù theå mau choùng tìm ñöôïc caùc bit khoùa

trong J1. Moät caùch roõ raøng hôn ñeå thöïc hieän ñieàu ñoù laø laäp moät baûng

cuûa 64 boä ñeám bieåu dieãn cho 64 khaû naêng cuûa cuûa 6 khoùa bit trong J1.

Boä ñeám seõ taêng moãi laàn, töông öùng vôùi söï xuaát hieän cuûa caùc bit

khoùa trong taäp test1 cho moät boä ba cuï theå. Cho t boä ba, ta hy voïng tìm

ñöôïc duy nhaát moät boä ñeám coù trò t; trò ñoù seõ töông öùng vôùi trò ñuùng

cuûa caùc bit khoùa trong J1.

1. Thaùm maõ heä DES - 3 voøng

Baây giôø ta seõ xeùt yù töôûng vöøa trình baøy cho vieäc thaùm maõ heä

DES - ba voøng. Ta seõ baét ñaàu vôùi caëp baûn roõ vaø caùc baûn maõ töông

öùng: L0R0, L0*R0

*, L3R3 vaø L3*R3

*. Ta coù theå bieåu dieãn R3 nhö sau:

R3 = L2 f(R2, K3)

= R1 f(R2, K3)

= L0 f(R0, K1) f(R2, K3)

R3* coù theå bieåu dieãn moät caùch töông töï , do vaäy:

R3‟ = L0‟ f(R0, K1) f(R0*, K1) f(R2, K3) f(R2

*, K3)

Baây giôø, giaû söû ta ñaõ choïn ñöôïc caùc baûn roõ sao cho R0 = R0*,

chaúng haïn:

R0‟ = 00...0

Khi ñoù f(R0, K1) = f(R0*, K1), vaø do ñoù:

R3‟ = L0‟ f(R2, K3) f(R2*, K3)

ÔÛ ñieåm naøy R3‟ laø ñöôïc bieát khi noù coù theå tính ñöôïc töø hai baûn

maõ, vaø L0‟ laø bieát ñöôïc khi noù coù theå tính ñöôïc töø hai baûn roõ. Nghóa

laø ta coù theå tính ñöôïc f(R2,K3)f(R2*,K3) töø phöông trình:

f(R2, K3) f(R2*, K3) = R3‟ L0‟

29 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

Baây giôø f(R2, K3) = P(C) vaø f(R2*, K3) = P(C*), vôùi C vaø C* töông öùng

laø kyù hieäu cuûa hai xaâu xuaát cuûa taùm S-hoäp (nhaéc laïi, P laø coá ñònh,

laø hoaùn vò ñöôïc bieát coâng khai). Neân:

P(C) P(C*) = R3‟ L0‟

vaø keát quaû laø:

C‟ = C C* = P-1(R3‟ L0‟) (1)

Ñoù laø xaâu xuaát x-or cho taùm S-hoäp trong voøng ba.

Baây giôø, R2 = L3 vaø R2* = L3* laø ñaõ bieát (chuùng laø moät phaàn

cuûa caùc baûn maõ). Töø ñaây ta coù theå tính:

E = E(L3) (2)

vaø

E* = E(L3*) (3)

söû duïng haøm môû roäng E ñöôïc bieát coâng khai. Chuùng laø nhöõng xaâu

nhaäp cho caùc S-hoäp cho voøng ba. Nhö vaäy giôø ta ñaõ bieát E, E*, vaø C‟

cho voøng ba vaø ta coù theå tieáp tuïc xaây döïng caùc taäp test1, ..., test8 cuûa

caùc trò coù theå coù cho caùc bit khoùa trong J1, ..., J8.

Giaûi thuaät vöøa xeùt coù theå bieåu dieãn bôûi caùc maõ sau:

Input: L0R0, L0*R0

*, L3R3 vaø L3*R3

*, vôùi R0 = R0*

1. Tính C‟ = P-1(R3‟ L0‟)

2. Tính E = E(L3) vaø E* = E(L*)

3. for j = 1 to 8 do

compute testj(Ej, Ej*, Cj‟)

Vieäc maõ thaùm seõ söû duïng moät soá boä ba E, E*, C‟ nhö vaäy. Ta

seõ laäp taùm baûng caùc boä ñeám vaø do ñoù xaùc ñònh ñöôïc 48 bit trong K3,

laø khoùa cho voøng ba. 56 bit trong khoùa khi ñoù coù theå tìm ñöôïc hoaøn

toaøn töø 28 = 256 khaû naêng cho 8 bit khoùa.

30 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

Baây giôø ta seõ minh hoïa ñieàu ñoù qua ví duï sau.

Ví duï 3.3

Giaû söû ta coù ba caëp baûn roõ vaø baûn maõ, vôùi caùc baûn maõ

cuøng coù caùc xaâu x-or ñöôïc maõ hoùa bôûi cuøng moät khoùa. Ñeå ngaén

goïn ta söû duïng heä thaäp luïc phaân:

Baûn roõ Baûn maõ

748502CD38451097

3874756438451097

03C70306D8A09F10

78560A0960E6D4CB

486911026ACDFF31

375BD31F6ACDFF31

45FA285BE5ADC730

134F7915AC253457

357418DA013FEC86

12549847013FEC86

D8A31B2F28BBC5CF

0F317AC2B23CB944

Töø caëp ñaàu tieân ta tính caùc xaâu nhaäp cuûa S-hoäp (cho voøng 3)

töø caùc phöông trình (2) vaø (3). Chuùng laø:

E = 000000000111111000001110100000000110100000001100

E* = 101111110000001010101100000001010100000001010010

Xaâu xuaát x-or cuûa S-hoäp ñöôïc tính baèng phöông trình (1) seõ laø:

C‟ = 10010110010111010101101101100111

Töø caëp thöù hai, ta tính ñöôïc caùc xaâu nhaäp cho S-hoäp laø:

E = 101000001011111111110100000101010000001011110110

E* = 100010100110101001011110101111110010100010101001

vaø xaâu xuaát x-or cuûa S-hoäp laø:

C‟ = 10011100100111000001111101010110

31 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

Töø caëp thöù ba, caùc xaâu nhaäp cho S-hoäp seõ laø:

E = 111011110001010100000110100011110110100101011111

E* = 000001011110100110100010101111110101011000000100

vaø xaâu xuaát x-or cuûa S-hoäp laø:

C‟ = 11010101011101011101101100101011

Tieáp theo, ta laäp baûng caùc trò trong taùm maûng boä ñeám cho moãi

caëp. Ta seõ minh hoïa thuû tuïc vôùi caùc maûng ñeám cho J1 töø caëp ñaàu

tieân. Trong caëp naøy, ta coù E1‟= 101111 vaø C1‟ = 1001. Taäp:

IN1(101111, 1001) = {000000, 000111, 101000, 101111}

Do E1 = 000000 ta coù:

J1 test1(000000, 101111, 1001) = {000000, 000111, 101000, 101111}

Do ñoù ta taêng caùc trò 0, 7, 40 vaø 47 trong caùc maûng ñeám cho J1.

Cuoái cuøng ta seõ trình baøy caùc baûng. Neáu ta xem caùc xaâu bit ñoä daøi 6 nhö laø bieåu dieãn cuûa caùc soá nguyeân trong khoaûng 0-63, thì 64 trò seõ töông öùng vôùi 0, 1, ..., 63. Caùc maûng ñeám seõ laø nhö sau:

J1

1 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0

0 0 0 0 0 1 1 0 0 0 0 1 1 0 0 0

0 1 0 0 0 1 0 0 1 0 0 0 0 0 0 3

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1

J2

0 0 0 1 0 3 0 0 1 0 0 1 0 0 0 0

0 1 0 0 0 2 0 0 0 0 0 0 1 0 0 0

32 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

0 0 0 0 0 1 0 0 1 0 1 0 0 0 1 0

0 0 1 1 0 0 0 0 1 0 1 0 2 0 0 0

J3

0 0 0 0 1 1 0 0 0 0 0 0 0 0 1 0

0 0 0 3 0 0 0 0 0 0 0 0 0 0 1 1

0 2 0 0 0 0 0 0 0 0 0 0 1 1 0 0

0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0

J4

3 1 0 0 0 0 0 0 0 0 2 2 0 0 0 0

0 0 0 0 1 1 0 0 0 0 0 0 1 0 1 1

1 1 1 0 1 0 0 0 0 1 1 1 0 0 1 0

0 0 0 0 1 1 0 0 0 0 0 0 0 0 2 1

J5

0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0

0 0 0 0 2 0 0 0 3 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 2 0 0 0 0 0 0 1 0 0 0 0 2 0

J6

1 0 0 1 1 0 0 3 0 0 0 0 1 0 0 1

33 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0

0 0 0 0 1 1 0 1 0 0 0 0 0 0 0 0

1 0 0 1 1 0 1 1 0 0 0 0 0 0 0 0

J7

0 0 2 1 0 1 0 3 0 0 0 1 1 0 0 0

0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 1

0 0 2 0 0 0 2 0 0 0 0 1 2 1 1 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1

J8

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 1 0 1 0 0 1 0 1

0 3 0 0 0 0 1 0 0 0 0 0 0 0 0 0

Trong moãi taùm maûng ñeám, coù duy nhaát moät boä ñeám coù trò laø 3.

Vò trí cuûa caùc boä ñeám ñoù xaùc ñònh caùc bit khoùa trong J1, ..., J8. Caùc vò

trí ñoù laø: 47, 5, 19, 0, 24, 7, 7, 49. Chuyeån caùc soá nguyeân ñoù sang daïng

nhò phaân, ta nhaän ñöôïc J1, ..., J8:

J1 = 101111

J2 = 000101

J3 = 010011

J4 = 000000

J5 = 011000

J6 = 000111

34 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

J7 = 000111

J8 = 110001

Baây giôø ta coù theå taïo ra 48 bit khoùa, baèng caùch quan saùt lòch

khoùa cho voøng ba. Suy ra laø K coù daïng:

0001101 0110001 01?01?0 1?00100

0101001 0000??0 111?11? ?100011

vôùi caùc bit kieåm tra ñaõ ñöôïc loaïi boû vaø “?” kyù hieäu bit khoùa chöa bieát.

Khoùa ñaày ñuû (trong daïng thaäp luïc phaân, goàm caû bit kieåm tra) seõ laø:

1A624C89520DEC46

2. Thaùm maõ heä DES 6-voøng

Baây giôø ta seõ moâ taû vieäc môû roäng yù töôûng treân cho vieäc thaùm maõ treân heä DES 6-voøng. YÙ töoûng ôû ñaây laø löïa choïn moät caùch caån thaän caëp baûn roõ vôùi xaâu x-or ñaëc thuø vaø sau ñoù xaùc ñònh caùc xaùc suaát cuûa caùc daõy ñaëc thuø cuûa caùc xaâu x-or qua caùc voøng laäp maõ. Baây giôø ta caàn ñònh nghóa moät khaùi nieäm quan troïng sau.

Ñònh nghóa 3.5: Cho n 1 laø soá nguyeân. Ñaëc tröng cuûa voøng thöù n laø

moät danh saùch caùc daïng

L0‟, R0‟, L1‟, R1‟, p1, ..., Ln‟, Rn‟, pn

thoûa maõn caùc ñieàu kieän sau:

1. Li‟ = Ri-1‟ vôùi 1 i n

2. Cho 1 i n vaø Li-1, Ri-1 vaø L*i-1, R

*i-1 laø ñaõ ñöôïc choïn sao cho Li-1 L*

i-1 =

L‟i-1 vaø Ri-1 R*i-1 = R‟i-1. Giaû söû Li, Ri vaø Li

* , Ri* laø tính ñöôïc nhôø

vieäc aùp duïng moät voøng laäp maõ DES. Khi ñoù xaùc suaát ñeå Li L*i =

Li‟ vaø Ri R*i = Ri‟ chính xaùc baèng pi. (Chuù yù laø, xaùc suaát naøy ñöôïc

tính treân taát caû caùc boä coù theå coù cuûa J = J1...J8) .

Xaùc suaát ñaëc tröng ñöôïc ñònh nghóa baèng tích p = p1 ... pn.

Nhaän xeùt: Giaû söû ta choïn L0, R0 vaø L0*, R0

* sao cho L0 L0* = L0‟

vaø R0

R0*= R0‟ vaø ta aùp duïng n voøng laäp maõ cuûa DES, nhaän ñöôïc L1. ..., Ln vaø

R1, ..., Rn. Khi ñoù ta khoâng theå ñoøi hoûi xaùc suaát ñeå Li Li* = Li‟ vaø Ri

Ri* = Ri‟ cho taát caû i ( 1 i n) laø p1 ... pn. Bôûi vì caùc boä -48 trong lòch

35 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

khoùa K1, ..., Kn khoâng phaûi laø ñoäc laäp laãn nhau. (Neáu n boä-48 naøy ñuôïc

choïn ñoäc laäp moät caùch ngaãu nhieân, thì ñieàu xaùc nhaän laø ñuùng).

Nhöng ta seõ coi raèng p1 ... pn chính xaùc laø xaùc xuaát ñoù.

Ta coøn caàn xaùc nhaän laø, caùc xaùc suaát pi trong ñaëc tröng laø caùc caëp

baûn roõ ñöôïc xaùc ñònh tuøy yù (nhöng coá ñònh) ñöôïc ñaëc taû baèng xaâu x-

or, vôùi 48 bit khoùa cho moät voøng laäp maõ DES laø coù 248 khaû naêng. Do

ñoù vieäc thaùm maõ seõ nhaèm vaøo vieäc xaùc ñònh khoùa coá ñònh (nhöng

chöa bieát). Do ñoù caàn coá choïn caùc baûn maõ ngaãu nhieân (nhöng chuùng

coù caùc xaâu x-or ñöôïc ñaëc taû), hy voïng raèng caùc xaùc suaát ñeå caùc

xaâu x-or trong n voøng laäp maõ truøng hôïp vôùi caùc xaâu x-or, ñöôïc ñaëc taû

trong ñaëc tröng, töøng ñoâi moät p1, ..., pn töông öùng.

Trong ví duï sau ñaây, ta seõ trình baøy ñaëc tröng voøng 1 ñeå laøm cô sôû cho vieäc thaùm maõ DES ba voøng trong hình sau (nhö ôû treân, ta seõ söû duïng caùch bieåu dieãn theo heä thaäp luïc phaân).

L‟0 = baát kyø R‟0 = 000000001

6

L‟1 = 000000001

6

R‟1 = L‟0 p = 1

Ta cuõng seõ moâ taû moät ñaëc tröng voøng 1 khaùc nhö sau

L‟0 = 000000001

6

R‟0 = 6000000016

L‟1 = 600000001

6

R‟1 = 0080820016 p = 14/64

36 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

Ta haõy xeùt ñaëc tröng sau moät caùch chi tieát hôn. Khi f(R0, K1) vaø f(R0*, K1)

ñöôïc tính, böôùc ñaàu tieân laø môû roäng R0 vaø R0*. Xaâu x-or keát quaû cuûa

hai môû roäng laø:

001100...0

Töùc laø xaâu x-or nhaäp cho S1 laø 001100 vaø caùc xaâu x-or cho baûy S-hoäp

khaùc ñeàu laø 000000. Caùc xaâu xuaát x-or cho S2 ñeán S8 ñeàu laø 0000.

Xaâu xuaát x-or cho S1 laø 1110 vôùi xaùc suaát 14/64 (do N1(001100, 1110) =

14). Neân ta nhaän ñöôïc:

C‟ = 11100000000000000000000000000000

vôùi xaùc suaát 14/64. Aùp duïng P, ta nhaän ñöôïc:

P(C) P(C*) = 00000000100000001000001000000000

trong daïng thaäp luïc phaân seõ laø 0080820016. Khi xaâu naøy coäng x-or vôùi

L0‟, ta nhaän ñöôïc R1‟ vôùi xaùc suaát 14/64. Do ñoù L1‟ = R0‟.

Vieäc thaùm maõ DES saùu voøng döïa treân ñaëc tröng ba voøng ñöôïc cho

trong hình sau. Trong thaùm maõ 6-voøng, ta baét ñaàu vôùi L0R0. L0*R0

*, L6R6 vaø

L6*R6

*, maø ta phaûi choïn baûn roõ sao cho L0‟= 4008000016 vaø R.0‟=

0400000016, ta coù theå bieåu dieãn R0 nhö sau:

L0‟

L1‟

L2‟

L3‟

=

=

=

=

400800001

6

040000001

6

000000001

6

040000001

6

R0‟

R1‟

R2‟

R3‟

=

=

=

=

040000001

6

000000001

6

040000001

6

400800001

6

p = 1/4

p = 1

p = 1/4

R6 = L5 f(R5, K6)

37 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

= R4 f(R5, K6)

= L3 f(R3, K4) f(R5, K6)

R6* cuõng coù theå bieåu dieãn töông töï, ta coù

R0‟ = L3‟ f(R3, K4) f(R3*, K4) f(R5, K6) f(R5

*, K6) (4)

(Ñeå yù laø töông töï nhö thaùm maõ 3-voøng)

R6‟ laø ñöôïc bieát. Töø ñaëc tröng ta tính L3‟ = 0400000016 vaø R3‟ = 4008000016

vôùi xaùc suaát 1/16. Neáu nhö vaäy, thì xaâu nhaäp x-or cho S-hoäp trong voøng

4 coù theå tính ñöôïc nhôø haøm môû roäng phaûi laø:

001000000000000001010000...0

Caùc xaâu x-or cho S2, S5, S6, S7 vaø S8 taát caû ñeàu baèng 000000, vaø vì theá

xaâu xuaát x-or laø 0000 cho taát caû naêm S-hoäp ñoù trong voøng 4. Ñieàu

naøy coù nghóa laø, ta coù theå tính ñöôïc caùc xaâu xuaát x-or cho naêm S-hoäp

ñoù trong voøng 6 nhôø phöông trình (4). Do ñoù giaû söû ta tính:

C1‟C2‟C3‟C4‟C5‟C6‟C7‟C8‟ = P-1(R6‟ 04000000)

moãi Ci laø xaâu bit coù ñoä daøi 4. Khi ñoù vôùi xaùc suaát 1/16, thì seõ daãn

ñeán laø C2‟, C5‟, C6‟, C7‟ vaø C8‟ töông öùng laø caùc xaâu x-or xuaát cuûa S2, S5,

S6, S7 vaø S8 trong voøng 6. Caùc xaâu nhaäp cho caùc S-hoäp ñoù trong voøng 6

coù theå tính ñöôïc laø E2, E5, E6, E7 vaø E8; vaø E2*, E5

*, E6*, E7

* vaø E8*, vôùi

E1E2E3E4E5E6E7E8 = E(R5) = E(L6)

vaø

E1*E2

*E3*E4

*E5*E6

*E7*E8

* = E(R5*) = E(L6

*)

coù theå tính ñöôïc töø caùc baûn roõ nhö sau:

Input: L0R0, L0*R0

*, L6R6 vaø L6*R6

*; vôùi L0‟ =

4008000016

vaø R0‟ = 0400000016.

38 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

1. Tính C‟ = P-1(R6‟ 0400000016) 2. Tính E = E(L6) vaø E* = E(L6

*)

3. for j {2,5,6,7,8} do tính testj( Ej, Ej*, Cj‟)

Ta cuõng seõ xaùc ñònh 30 bit khoùa trong J2, J5, J6, J7 vaø J8 nhö trong

thaùm maõ 3-voøng. Baøi toaùn, ñeå xaâu xuaát x-or giaû ñònh cho voøng 6 laø

chính xaùc chæ vôùi xaùc suaát 1/16. Coøn 15/16 phaàn coøn laïi ta seõ thöôøng

nhaän ñöôïc nhöõng xaâu voâ duïng ngaãu nhieân hôn laø caùc bit khoùa.

Ñònh nghóa 3.6: Giaû söû L0 L0* = L0‟ vaø R0 R0

*= R0‟. Ta noùi raèng, caëp

baûn roõ L0R0 vaø L0* R0

* laø ñuùng (right) öùng vôùi ñaëc tröng neáu Li Li* = Li‟

vaø Ri Ri*= Ri‟ cho moïi i, 1 i n. Caëp traùi vôùi caëp ñöôïc ñònh nghóa goïi

laø caëp sai (wrong).

Ta mong raèng, khoaûng 1/16 soá caëp cuûa ta laø ñuùng, coøn caùc caëp coøn laïi laø caëp sai öùng vôùi ñaëc tröng voøng ba cuûa ta.

Chieán löôïc cuûa ta laø tính Ej. Ej* vaø Cj‟nhö ñaõ moâ taû ôû treân vaø sau ñoù

xaùc ñònh testj(Ej, Ej*, Cj‟) vôùi j = 2,5,6,7,8. Neáu ta baét ñaàu vôùi moät caëp

ñuùng, thì thì caùc bit khoùa chính xaùc cho moãi Jj seõ naèm trong taäp testj.

Neáu caëp laø sai, thì trò Cj‟ seõ khoâng ñuùng, vaø ñoù laø nguyeân do ñeå giaû

ñònh raèng, moãi taäp testj thöïc chaát laø ngaãu nhieân.

Ta coù theå nhaän ra caëp ñuùng theo phöông phaùp sau: Neáu testj= 0, vôùi

baát kyø j {2,5,6,7,8}, khi ñoù ta taát yeáu coù ñöôïc caëp ñuùng. Baây giôø cho

moät caëp sai, ta coù theå hy voïng raèng, xaùc suaát ñeå testj= 0 cho moät j cuï

theå laø xaáp xæ 1/5. Ñoù laø lyù do ñeå giaû ñònh laø, Nj(Ej‟, Cj‟) = testj vaø

nhö ñaõ nhaän xeùt töø tröôùc, xaùc suaát ñeå Nj(Ej‟, Cj‟) = 0 laø xaáp xæ 1/5.

Xaùc suaát ñeå caû naêm testj ñeàu döông laø vaøo khoaûng 0.85 0.33, quaû

vaäy xaùc suaát ñeå ít nhaát moät testj baèng 0 laø vaøo khoaûng 0.67. Neân ta

coù khoaûng 2/3 soá caëp laø sai, nhôø vaøo moät nhaän xeùt ñôn giaûn, ñöôïc

goïi laø pheùp loïc (filtering operation). Tyû soá cuûa caùc caëp ñuùng treân caùc

caëp coøn laïi sau pheùp loïc laø vaøo khoaûng:

39 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

61311615161

161

Ví duï 3.4: Giaû söû ta coù caëp baûn roõ - baûn maõ sau:

Baûn roõ Baûn maõ

86FA1C2B1F51D3BE

C6F21C2B1B51D3BE

1E23ED7F2F553971

296DE2B687AC6340

Chuù yù laø, L0‟ = 4008000016 vaø R0‟ = 0400000016. Xaâu nhaäp vaø xaâu xuaát

cuûa S-hoäp cho voøng 6 ñöôïc tính nhö sau:

j Ej Ej* Cj‟

2

5

6

7

8

111100

111101

011010

101111

111110

010010

111100

000101

010110

101100

1101

0001

0010

1100

1101

Khi ñoù caùc taäp testj seõ laø nhö sau:

j testj

2 14, 15,26, 30, 32, 33, 48, 52

5

40 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

6 7, 24, 36, 41, 54, 59

7

8 34, 35, 48, 49

Ta thaáy raèng, hai taäp test5 vaø test7 laø roãng , neân caëp naøy laø caëp sai

vaø noù bò loaïi boû baèng pheùp loïc.

Baây giôø giaû söû ta coù caëp sao cho testj> 0 vôùi j = 2,5,6,7,8 laø nhöõng

taäp coøn laïi sau pheùp loïc.(Bôûi vì ta khoâng bieát ñöôïc laø caëp naøo ñuùng,

caëp naøo sai.) Ta noùi raèng, xaâu bit J2J5J6J7J8 ñoä daøi 30 laø ñöôïc ñeà xuaát

bôûi caëp neáu Jj testj vôùi j = 2,5,6,7,8. Soá caùc caëp ñöôïc ñeà xuaát laø:

8,7,6,5,2j

jtest

Ñoù laø bình thöôøng vôùi soá xaâu bit ñöôïc ñeà xuaát laø khaù lôùn.

(Chaúng haïn. lôùn hôn 80000)

Giaû söû, ta laäp baûng cho taát caû caùc xaâu ñöôïc ñeà xuaát nhaän ñöôïc töø

N caëp, maø khoâng bò loaïi bôûi pheùp loïc. Vôùi moãi caëp ñuùng, thì xaâu bit

ñuùng J2J5J6J7J8 seõ laø xaâu ñöôïc ñeà xuaát. Xaâu bit ñuùng seõ ñöôïc tính

khoaûng 3N/16 laàn. Xaâu bit sai thöôøng xuaát hieän ít hôn, bôûi vì chuùng xuaát

hieän ngaãu nhieân vaø coù khoaûng 230 khaû naêng. (Laø moät soá raát lôùn.)

Ta nhaän ñöôïc moät baûng cöïc lôùn taát caû caùc xaâu ñöôïc ñeà xuaát,

neân ta söû duïng moät thuaät toaùn chæ ñoøi hoûi moät khoâng gian vaø thôøi

gian ít nhaát. Ta coù theå maõ hoùa baát kyø moät taäp testj naøo thaønh moät

veùc tô Tj coù ñoä daøi 64, vôùi toïa ñoä thöù i cuûa Tj ñöôïc ñaët baèng 1 (0

i63), neáu xaâu bit ñoä daøi 6 laø bieåu dieãn cuûa i ôû trong taäp testj; vaø toïa

ñoä thöù i ñöôïc ñaët baèng 0 trong tröôøng hôïp ngöôïc laïi ( ñieàu naøy gioáng

nhö maûng caùc boä ñeám maø ta ñaõ söû duïng trong thaùm maõ DES ba

voøng).

41 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

Vôùi moãi caëp coøn laïi, ta xaây döïng caùc veùc tô nhö treân vaø goïi

chuùng laø Tji, j=2,5,6,7,8; 1 i N. Vôùi I {1, ..., N} ta noùi raèng I laø chaáp

nhaän ñöôïc (allowable) neáu vôùi moãi j {2,5,6,7,8} coù ít nhaát moät toïa ñoä

baèng I trong veùc tô

Ii

i

jT

Neáu caëp thöù i laø caëp ñuùng cho moãi iI, thì taäp I laø chaáp nhaän

ñöôïc. Do ñoù ta cho raèng taäp chaáp nhaän ñöôïc coù kích thöôùc (xaáp xæ)

3N/16, laø taäp ñeà xuaát vaø ta hy voïng laø chæ goàm caùc bit khoùa ñuùng

chöù khoâng coù caùc xaâu khaùc. Ñieàu naøy laøm ñôn giaûn hoùa cho vieäc

xaây döïng taát caû caùc taäp chaáp nhaän ñöôïc I baèng moät thuaät toaùn ñeä

qui.

3 Caùc thaùm maõ vi sai khaùc

Phöông phaùp thaùm maõ vi sai coøn coù theå aùp duïng ñeå thaùm caùc

heä DES nhieàu voøng hôn. Vôùi heä DES 8-voøng ñoøi hoûi 214 baûn roõ choïn

vaø caùc heä 10-, 12-, 14- vaø 16-voøng ñoøi hoûi coù töông öùng 224, 231, 239 vaø

247 baûn maõ choïn. Neân noùi chung laø khaù phöùc taïp.

Caùc kyõ thuaät thaùm maõ vi sai ñöôïc Biham vaø Shamir phaùt trieån. Caùc phöông phaùp thaùm maõ DES khaùc ñaõ ñöôïc Matsui söû duïng nhö laø thaùm maõ tuyeán tính.

1. HEÄ MAÕ DES 3 VOØNG

Chöông trình goàm hai phaàn:

Phaàn Giao Dieân (chöùa trong thö muïc GiaoDien): Coù chöùc naêng xöû lyù giao dieän.

Phaàn Xöû Lyù (chöùa trong thö muïc XuLy): coù chöùc naêng hoä trôï caùc haøm xöû lyù.

2. Giao Dieän ( Package GiaoDien).

a. Maøn hình chính (Mainform.vb)

42 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

Form laäp maõ vaø giaûi maõ DES(Des.vb)

Source code moät soá haøm chính trong form giai maõ Des

Imports System.IO

Public Class des Inherits System.Windows.Forms.Form

khai bao bien

43 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

Dim str As String

Dim s(7) As DataTable

Dim ip() As String

'Dim iptru() As String

Dim e() As String

Dim p() As String

Dim pc1() As String

Dim pc2() As String

Dim daykhoa(15) As String

Dim x As String

Dim daynhap(29) As String

Dim daybanma(29) As String

khoi tao

Sub khoitao_s0()

Dim i As Integer

s(0) = New DataTable

For i = 0 To 15

Dim col As DataColumn = New DataColumn

s(0).Columns.Add(col)

Next

For i = 0 To 3

Dim row As DataRow = s(0).NewRow

s(0).Rows.Add(row)

Next

s(0).Rows(0).Item(0) = 14

s(0).Rows(0).Item(1) = 4

s(0).Rows(0).Item(2) = 13

s(0).Rows(0).Item(3) = 1

44 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

s(0).Rows(0).Item(4) = 2

s(0).Rows(0).Item(5) = 15

s(0).Rows(0).Item(6) = 11

s(0).Rows(0).Item(7) = 8

s(0).Rows(0).Item(8) = 3

s(0).Rows(0).Item(9) = 10

s(0).Rows(0).Item(10) = 6

s(0).Rows(0).Item(11) = 12

s(0).Rows(0).Item(12) = 5

s(0).Rows(0).Item(13) = 9

s(0).Rows(0).Item(14) = 0

s(0).Rows(0).Item(15) = 7

s(0).Rows(1).Item(0) = 0

s(0).Rows(1).Item(1) = 15

s(0).Rows(1).Item(2) = 7

s(0).Rows(1).Item(3) = 4

s(0).Rows(1).Item(4) = 14

s(0).Rows(1).Item(5) = 2

s(0).Rows(1).Item(6) = 13

s(0).Rows(1).Item(7) = 1

s(0).Rows(1).Item(8) = 10

s(0).Rows(1).Item(9) = 6

s(0).Rows(1).Item(10) = 12

s(0).Rows(1).Item(11) = 11

s(0).Rows(1).Item(12) = 9

s(0).Rows(1).Item(13) = 5

s(0).Rows(1).Item(14) = 3

s(0).Rows(1).Item(15) = 8

45 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

s(0).Rows(2).Item(0) = 4

s(0).Rows(2).Item(1) = 1

s(0).Rows(2).Item(2) = 14

s(0).Rows(2).Item(3) = 8

s(0).Rows(2).Item(4) = 13

s(0).Rows(2).Item(5) = 6

s(0).Rows(2).Item(6) = 2

s(0).Rows(2).Item(7) = 11

s(0).Rows(2).Item(8) = 15

s(0).Rows(2).Item(9) = 12

s(0).Rows(2).Item(10) = 9

s(0).Rows(2).Item(11) = 7

s(0).Rows(2).Item(12) = 3

s(0).Rows(2).Item(13) = 10

s(0).Rows(2).Item(14) = 5

s(0).Rows(2).Item(15) = 0

s(0).Rows(3).Item(0) = 15

s(0).Rows(3).Item(1) = 12

s(0).Rows(3).Item(2) = 8

s(0).Rows(3).Item(3) = 2

s(0).Rows(3).Item(4) = 4

s(0).Rows(3).Item(5) = 9

s(0).Rows(3).Item(6) = 1

s(0).Rows(3).Item(7) = 7

s(0).Rows(3).Item(8) = 5

s(0).Rows(3).Item(9) = 11

s(0).Rows(3).Item(10) = 3

s(0).Rows(3).Item(11) = 14

46 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

s(0).Rows(3).Item(12) = 10

s(0).Rows(3).Item(13) = 0

s(0).Rows(3).Item(14) = 6

s(0).Rows(3).Item(15) = 13

dgs0.DataSource = s(0)

End Sub

Ham khoi tao s1

Sub khoitao_s1()

Dim i As Integer

s(1) = New DataTable

For i = 0 To 15

Dim col As DataColumn = New DataColumn

s(1).Columns.Add(col)

Next

For i = 0 To 3

Dim row As DataRow = s(1).NewRow

s(1).Rows.Add(row)

Next

s(1).Rows(0).Item(0) = 15

s(1).Rows(0).Item(1) = 1

s(1).Rows(0).Item(2) = 8

s(1).Rows(0).Item(3) = 14

s(1).Rows(0).Item(4) = 6

s(1).Rows(0).Item(5) = 11

s(1).Rows(0).Item(6) = 3

s(1).Rows(0).Item(7) = 4

s(1).Rows(0).Item(8) = 9

s(1).Rows(0).Item(9) = 7

47 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

s(1).Rows(0).Item(10) = 2

s(1).Rows(0).Item(11) = 13

s(1).Rows(0).Item(12) = 12

s(1).Rows(0).Item(13) = 0

s(1).Rows(0).Item(14) = 5

s(1).Rows(0).Item(15) = 10

s(1).Rows(1).Item(0) = 3

s(1).Rows(1).Item(1) = 13

s(1).Rows(1).Item(2) = 4

s(1).Rows(1).Item(3) = 7

s(1).Rows(1).Item(4) = 15

s(1).Rows(1).Item(5) = 2

s(1).Rows(1).Item(6) = 8

s(1).Rows(1).Item(7) = 14

s(1).Rows(1).Item(8) = 12

s(1).Rows(1).Item(9) = 0

s(1).Rows(1).Item(10) = 1

s(1).Rows(1).Item(11) = 10

s(1).Rows(1).Item(12) = 6

s(1).Rows(1).Item(13) = 9

s(1).Rows(1).Item(14) = 11

s(1).Rows(1).Item(15) = 5

s(1).Rows(2).Item(0) = 0

s(1).Rows(2).Item(1) = 14

s(1).Rows(2).Item(2) = 7

s(1).Rows(2).Item(3) = 11

s(1).Rows(2).Item(4) = 10

s(1).Rows(2).Item(5) = 4

48 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

s(1).Rows(2).Item(6) = 13

s(1).Rows(2).Item(7) = 1

s(1).Rows(2).Item(8) = 5

s(1).Rows(2).Item(9) = 8

s(1).Rows(2).Item(10) = 12

s(1).Rows(2).Item(11) = 6

s(1).Rows(2).Item(12) = 9

s(1).Rows(2).Item(13) = 3

s(1).Rows(2).Item(14) = 2

s(1).Rows(2).Item(15) = 15

s(1).Rows(3).Item(0) = 13

s(1).Rows(3).Item(1) = 8

s(1).Rows(3).Item(2) = 10

s(1).Rows(3).Item(3) = 1

s(1).Rows(3).Item(4) = 3

s(1).Rows(3).Item(5) = 15

s(1).Rows(3).Item(6) = 4

s(1).Rows(3).Item(7) = 2

s(1).Rows(3).Item(8) = 11

s(1).Rows(3).Item(9) = 6

s(1).Rows(3).Item(10) = 7

s(1).Rows(3).Item(11) = 12

s(1).Rows(3).Item(12) = 0

s(1).Rows(3).Item(13) = 5

s(1).Rows(3).Item(14) = 14

s(1).Rows(3).Item(15) = 9

dgs1.DataSource = s(1)

End Sub

49 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

Ham khoi tao s2

Sub khoitao_s2()

Dim i As Integer

s(2) = New DataTable

For i = 0 To 15

Dim col As DataColumn = New DataColumn

s(2).Columns.Add(col)

Next

For i = 0 To 3

Dim row As DataRow = s(2).NewRow

s(2).Rows.Add(row)

Next

s(2).Rows(0).Item(0) = 10

s(2).Rows(0).Item(1) = 0

s(2).Rows(0).Item(2) = 9

s(2).Rows(0).Item(3) = 14

s(2).Rows(0).Item(4) = 6

s(2).Rows(0).Item(5) = 3

s(2).Rows(0).Item(6) = 15

s(2).Rows(0).Item(7) = 5

s(2).Rows(0).Item(8) = 1

s(2).Rows(0).Item(9) = 13

s(2).Rows(0).Item(10) = 12

s(2).Rows(0).Item(11) = 7

s(2).Rows(0).Item(12) = 11

s(2).Rows(0).Item(13) = 4

s(2).Rows(0).Item(14) = 2

s(2).Rows(0).Item(15) = 8

50 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

s(2).Rows(1).Item(0) = 13

s(2).Rows(1).Item(1) = 7

s(2).Rows(1).Item(2) = 0

s(2).Rows(1).Item(3) = 9

s(2).Rows(1).Item(4) = 3

s(2).Rows(1).Item(5) = 4

s(2).Rows(1).Item(6) = 6

s(2).Rows(1).Item(7) = 10

s(2).Rows(1).Item(8) = 2

s(2).Rows(1).Item(9) = 8

s(2).Rows(1).Item(10) = 5

s(2).Rows(1).Item(11) = 14

s(2).Rows(1).Item(12) = 12

s(2).Rows(1).Item(13) = 11

s(2).Rows(1).Item(14) = 15

s(2).Rows(1).Item(15) = 1

s(2).Rows(2).Item(0) = 13

s(2).Rows(2).Item(1) = 6

s(2).Rows(2).Item(2) = 4

s(2).Rows(2).Item(3) = 9

s(2).Rows(2).Item(4) = 8

s(2).Rows(2).Item(5) = 15

s(2).Rows(2).Item(6) = 3

s(2).Rows(2).Item(7) = 0

s(2).Rows(2).Item(8) = 11

s(2).Rows(2).Item(9) = 1

s(2).Rows(2).Item(10) = 2

s(2).Rows(2).Item(11) = 12

51 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

s(2).Rows(2).Item(12) = 5

s(2).Rows(2).Item(13) = 10

s(2).Rows(2).Item(14) = 14

s(2).Rows(2).Item(15) = 7

s(2).Rows(3).Item(0) = 1

s(2).Rows(3).Item(1) = 10

s(2).Rows(3).Item(2) = 13

s(2).Rows(3).Item(3) = 0

s(2).Rows(3).Item(4) = 6

s(2).Rows(3).Item(5) = 9

s(2).Rows(3).Item(6) = 8

s(2).Rows(3).Item(7) = 7

s(2).Rows(3).Item(8) = 4

s(2).Rows(3).Item(9) = 15

s(2).Rows(3).Item(10) = 14

s(2).Rows(3).Item(11) = 3

s(2).Rows(3).Item(12) = 11

s(2).Rows(3).Item(13) = 5

s(2).Rows(3).Item(14) = 3

s(2).Rows(3).Item(15) = 12

dgs2.DataSource = s(2)

End Sub

Haøm khôûi taïo s3

Sub khoitao_s3()

Dim i As Integer

s(3) = New DataTable

For i = 0 To 15

Dim col As DataColumn = New DataColumn

52 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

s(3).Columns.Add(col)

Next

For i = 0 To 3

Dim row As DataRow = s(3).NewRow

s(3).Rows.Add(row)

Next

s(3).Rows(0).Item(0) = 7

s(3).Rows(0).Item(1) = 13

s(3).Rows(0).Item(2) = 14

s(3).Rows(0).Item(3) = 3

s(3).Rows(0).Item(4) = 0

s(3).Rows(0).Item(5) = 6

s(3).Rows(0).Item(6) = 9

s(3).Rows(0).Item(7) = 10

s(3).Rows(0).Item(8) = 1

s(3).Rows(0).Item(9) = 2

s(3).Rows(0).Item(10) = 8

s(3).Rows(0).Item(11) = 5

s(3).Rows(0).Item(12) = 11

s(3).Rows(0).Item(13) = 12

s(3).Rows(0).Item(14) = 4

s(3).Rows(0).Item(15) = 15

s(3).Rows(1).Item(0) = 13

s(3).Rows(1).Item(1) = 8

s(3).Rows(1).Item(2) = 11

s(3).Rows(1).Item(3) = 5

s(3).Rows(1).Item(4) = 6

s(3).Rows(1).Item(5) = 15

53 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

s(3).Rows(1).Item(6) = 0

s(3).Rows(1).Item(7) = 3

s(3).Rows(1).Item(8) = 4

s(3).Rows(1).Item(9) = 7

s(3).Rows(1).Item(10) = 2

s(3).Rows(1).Item(11) = 12

s(3).Rows(1).Item(12) = 1

s(3).Rows(1).Item(13) = 10

s(3).Rows(1).Item(14) = 14

s(3).Rows(1).Item(15) = 9

s(3).Rows(2).Item(0) = 10

s(3).Rows(2).Item(1) = 6

s(3).Rows(2).Item(2) = 9

s(3).Rows(2).Item(3) = 0

s(3).Rows(2).Item(4) = 12

s(3).Rows(2).Item(5) = 11

s(3).Rows(2).Item(6) = 7

s(3).Rows(2).Item(7) = 13

s(3).Rows(2).Item(8) = 15

s(3).Rows(2).Item(9) = 1

s(3).Rows(2).Item(10) = 3

s(3).Rows(2).Item(11) = 14

s(3).Rows(2).Item(12) = 5

s(3).Rows(2).Item(13) = 2

s(3).Rows(2).Item(14) = 8

s(3).Rows(2).Item(15) = 4

s(3).Rows(3).Item(0) = 3

s(3).Rows(3).Item(1) = 15

54 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

s(3).Rows(3).Item(2) = 0

s(3).Rows(3).Item(3) = 6

s(3).Rows(3).Item(4) = 10

s(3).Rows(3).Item(5) = 1

s(3).Rows(3).Item(6) = 13

s(3).Rows(3).Item(7) = 8

s(3).Rows(3).Item(8) = 9

s(3).Rows(3).Item(9) = 4

s(3).Rows(3).Item(10) = 5

s(3).Rows(3).Item(11) = 11

s(3).Rows(3).Item(12) = 12

s(3).Rows(3).Item(13) = 7

s(3).Rows(3).Item(14) = 2

s(3).Rows(3).Item(15) = 14

dgs3.DataSource = s(3)

End Sub

Haøm khôûi taïo s4

Sub khoitao_s4()

Dim i As Integer

s(4) = New DataTable

For i = 0 To 15

Dim col As DataColumn = New DataColumn

s(4).Columns.Add(col)

Next

For i = 0 To 3

Dim row As DataRow = s(4).NewRow

s(4).Rows.Add(row)

Next

55 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

s(4).Rows(0).Item(0) = 2

s(4).Rows(0).Item(1) = 12

s(4).Rows(0).Item(2) = 4

s(4).Rows(0).Item(3) = 1

s(4).Rows(0).Item(4) = 7

s(4).Rows(0).Item(5) = 10

s(4).Rows(0).Item(6) = 11

s(4).Rows(0).Item(7) = 6

s(4).Rows(0).Item(8) = 8

s(4).Rows(0).Item(9) = 5

s(4).Rows(0).Item(10) = 3

s(4).Rows(0).Item(11) = 15

s(4).Rows(0).Item(12) = 13

s(4).Rows(0).Item(13) = 0

s(4).Rows(0).Item(14) = 14

s(4).Rows(0).Item(15) = 9

s(4).Rows(1).Item(0) = 14

s(4).Rows(1).Item(1) = 11

s(4).Rows(1).Item(2) = 2

s(4).Rows(1).Item(3) = 12

s(4).Rows(1).Item(4) = 4

s(4).Rows(1).Item(5) = 7

s(4).Rows(1).Item(6) = 13

s(4).Rows(1).Item(7) = 1

s(4).Rows(1).Item(8) = 5

s(4).Rows(1).Item(9) = 0

s(4).Rows(1).Item(10) = 15

s(4).Rows(1).Item(11) = 10

56 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

s(4).Rows(1).Item(12) = 3

s(4).Rows(1).Item(13) = 9

s(4).Rows(1).Item(14) = 8

s(4).Rows(1).Item(15) = 6

s(4).Rows(2).Item(0) = 4

s(4).Rows(2).Item(1) = 2

s(4).Rows(2).Item(2) = 1

s(4).Rows(2).Item(3) = 11

s(4).Rows(2).Item(4) = 10

s(4).Rows(2).Item(5) = 13

s(4).Rows(2).Item(6) = 7

s(4).Rows(2).Item(7) = 8

s(4).Rows(2).Item(8) = 15

s(4).Rows(2).Item(9) = 9

s(4).Rows(2).Item(10) = 12

s(4).Rows(2).Item(11) = 5

s(4).Rows(2).Item(12) = 6

s(4).Rows(2).Item(13) = 3

s(4).Rows(2).Item(14) = 0

s(4).Rows(2).Item(15) = 14

s(4).Rows(3).Item(0) = 11

s(4).Rows(3).Item(1) = 8

s(4).Rows(3).Item(2) = 12

s(4).Rows(3).Item(3) = 7

s(4).Rows(3).Item(4) = 0

s(4).Rows(3).Item(5) = 14

s(4).Rows(3).Item(6) = 2

s(4).Rows(3).Item(7) = 13

57 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

s(4).Rows(3).Item(8) = 6

s(4).Rows(3).Item(9) = 15

s(4).Rows(3).Item(10) = 0

s(4).Rows(3).Item(11) = 9

s(4).Rows(3).Item(12) = 10

s(4).Rows(3).Item(13) = 4

s(4).Rows(3).Item(14) = 5

s(4).Rows(3).Item(15) = 3

dgs4.DataSource = s(4)

End Sub

Haøm khôûi taïo S5

Sub khoitao_s5()

Dim i As Integer

s(5) = New DataTable

For i = 0 To 15

Dim col As DataColumn = New DataColumn

s(5).Columns.Add(col)

Next

For i = 0 To 3

Dim row As DataRow = s(5).NewRow

s(5).Rows.Add(row)

Next

s(5).Rows(0).Item(0) = 12

s(5).Rows(0).Item(1) = 1

s(5).Rows(0).Item(2) = 10

s(5).Rows(0).Item(3) = 15

s(5).Rows(0).Item(4) = 9

s(5).Rows(0).Item(5) = 2

58 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

s(5).Rows(0).Item(6) = 6

s(5).Rows(0).Item(7) = 8

s(5).Rows(0).Item(8) = 0

s(5).Rows(0).Item(9) = 13

s(5).Rows(0).Item(10) = 3

s(5).Rows(0).Item(11) = 4

s(5).Rows(0).Item(12) = 14

s(5).Rows(0).Item(13) = 7

s(5).Rows(0).Item(14) = 5

s(5).Rows(0).Item(15) = 11

s(5).Rows(1).Item(0) = 10

s(5).Rows(1).Item(1) = 15

s(5).Rows(1).Item(2) = 4

s(5).Rows(1).Item(3) = 2

s(5).Rows(1).Item(4) = 7

s(5).Rows(1).Item(5) = 12

s(5).Rows(1).Item(6) = 9

s(5).Rows(1).Item(7) = 5

s(5).Rows(1).Item(8) = 6

s(5).Rows(1).Item(9) = 1

s(5).Rows(1).Item(10) = 13

s(5).Rows(1).Item(11) = 14

s(5).Rows(1).Item(12) = 0

s(5).Rows(1).Item(13) = 11

s(5).Rows(1).Item(14) = 3

s(5).Rows(1).Item(15) = 8

s(5).Rows(2).Item(0) = 9

s(5).Rows(2).Item(1) = 14

59 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

s(5).Rows(2).Item(2) = 15

s(5).Rows(2).Item(3) = 5

s(5).Rows(2).Item(4) = 2

s(5).Rows(2).Item(5) = 8

s(5).Rows(2).Item(6) = 12

s(5).Rows(2).Item(7) = 3

s(5).Rows(2).Item(8) = 7

s(5).Rows(2).Item(9) = 0

s(5).Rows(2).Item(10) = 4

s(5).Rows(2).Item(11) = 10

s(5).Rows(2).Item(12) = 1

s(5).Rows(2).Item(13) = 13

s(5).Rows(2).Item(14) = 11

s(5).Rows(2).Item(15) = 6

s(5).Rows(3).Item(0) = 4

s(5).Rows(3).Item(1) = 3

s(5).Rows(3).Item(2) = 2

s(5).Rows(3).Item(3) = 12

s(5).Rows(3).Item(4) = 9

s(5).Rows(3).Item(5) = 5

s(5).Rows(3).Item(6) = 15

s(5).Rows(3).Item(7) = 10

s(5).Rows(3).Item(8) = 11

s(5).Rows(3).Item(9) = 14

s(5).Rows(3).Item(10) = 1

s(5).Rows(3).Item(11) = 7

s(5).Rows(3).Item(12) = 6

s(5).Rows(3).Item(13) = 0

60 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

s(5).Rows(3).Item(14) = 8

s(5).Rows(3).Item(15) = 13

dgs5.DataSource = s(5)

End Sub

Haøm khôûi taïo S6

Sub khoitao_s6()

Dim i As Integer

s(6) = New DataTable

For i = 0 To 15

Dim col As DataColumn = New DataColumn

s(6).Columns.Add(col)

Next

For i = 0 To 3

Dim row As DataRow = s(6).NewRow

s(6).Rows.Add(row)

Next

s(6).Rows(0).Item(0) = 4

s(6).Rows(0).Item(1) = 11

s(6).Rows(0).Item(2) = 2

s(6).Rows(0).Item(3) = 14

s(6).Rows(0).Item(4) = 15

s(6).Rows(0).Item(5) = 0

s(6).Rows(0).Item(6) = 8

s(6).Rows(0).Item(7) = 13

s(6).Rows(0).Item(8) = 3

s(6).Rows(0).Item(9) = 12

s(6).Rows(0).Item(10) = 9

s(6).Rows(0).Item(11) = 7

61 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

s(6).Rows(0).Item(12) = 5

s(6).Rows(0).Item(13) = 10

s(6).Rows(0).Item(14) = 6

s(6).Rows(0).Item(15) = 1

s(6).Rows(1).Item(0) = 13

s(6).Rows(1).Item(1) = 0

s(6).Rows(1).Item(2) = 11

s(6).Rows(1).Item(3) = 7

s(6).Rows(1).Item(4) = 4

s(6).Rows(1).Item(5) = 9

s(6).Rows(1).Item(6) = 1

s(6).Rows(1).Item(7) = 10

s(6).Rows(1).Item(8) = 14

s(6).Rows(1).Item(9) = 3

s(6).Rows(1).Item(10) = 5

s(6).Rows(1).Item(11) = 12

s(6).Rows(1).Item(12) = 2

s(6).Rows(1).Item(13) = 15

s(6).Rows(1).Item(14) = 8

s(6).Rows(1).Item(15) = 6

s(6).Rows(2).Item(0) = 1

s(6).Rows(2).Item(1) = 4

s(6).Rows(2).Item(2) = 11

s(6).Rows(2).Item(3) = 13

s(6).Rows(2).Item(4) = 12

s(6).Rows(2).Item(5) = 3

s(6).Rows(2).Item(6) = 7

s(6).Rows(2).Item(7) = 14

62 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

s(6).Rows(2).Item(8) = 10

s(6).Rows(2).Item(9) = 15

s(6).Rows(2).Item(10) = 6

s(6).Rows(2).Item(11) = 8

s(6).Rows(2).Item(12) = 0

s(6).Rows(2).Item(13) = 5

s(6).Rows(2).Item(14) = 9

s(6).Rows(2).Item(15) = 2

s(6).Rows(3).Item(0) = 6

s(6).Rows(3).Item(1) = 11

s(6).Rows(3).Item(2) = 13

s(6).Rows(3).Item(3) = 8

s(6).Rows(3).Item(4) = 1

s(6).Rows(3).Item(5) = 4

s(6).Rows(3).Item(6) = 10

s(6).Rows(3).Item(7) = 7

s(6).Rows(3).Item(8) = 9

s(6).Rows(3).Item(9) = 5

s(6).Rows(3).Item(10) = 0

s(6).Rows(3).Item(11) = 15

s(6).Rows(3).Item(12) = 14

s(6).Rows(3).Item(13) = 2

s(6).Rows(3).Item(14) = 3

s(6).Rows(3).Item(15) = 12

dgs6.DataSource = s(6)

End Sub

Haøm khôûi taïo S7

Sub khoitao_s7()

63 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

Dim i As Integer

s(7) = New DataTable

For i = 0 To 15

Dim col As DataColumn = New DataColumn

s(7).Columns.Add(col)

Next

For i = 0 To 3

Dim row As DataRow = s(7).NewRow

s(7).Rows.Add(row)

Next

s(7).Rows(0).Item(0) = 13

s(7).Rows(0).Item(1) = 2

s(7).Rows(0).Item(2) = 8

s(7).Rows(0).Item(3) = 4

s(7).Rows(0).Item(4) = 6

s(7).Rows(0).Item(5) = 15

s(7).Rows(0).Item(6) = 11

s(7).Rows(0).Item(7) = 1

s(7).Rows(0).Item(8) = 10

s(7).Rows(0).Item(9) = 9

s(7).Rows(0).Item(10) = 3

s(7).Rows(0).Item(11) = 14

s(7).Rows(0).Item(12) = 5

s(7).Rows(0).Item(13) = 0

s(7).Rows(0).Item(14) = 12

s(7).Rows(0).Item(15) = 7

s(7).Rows(1).Item(0) = 1

s(7).Rows(1).Item(1) = 15

64 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

s(7).Rows(1).Item(2) = 13

s(7).Rows(1).Item(3) = 8

s(7).Rows(1).Item(4) = 10

s(7).Rows(1).Item(5) = 3

s(7).Rows(1).Item(6) = 7

s(7).Rows(1).Item(7) = 4

s(7).Rows(1).Item(8) = 12

s(7).Rows(1).Item(9) = 5

s(7).Rows(1).Item(10) = 6

s(7).Rows(1).Item(11) = 11

s(7).Rows(1).Item(12) = 0

s(7).Rows(1).Item(13) = 14

s(7).Rows(1).Item(14) = 9

s(7).Rows(1).Item(15) = 2

s(7).Rows(2).Item(0) = 7

s(7).Rows(2).Item(1) = 11

s(7).Rows(2).Item(2) = 4

s(7).Rows(2).Item(3) = 1

s(7).Rows(2).Item(4) = 9

s(7).Rows(2).Item(5) = 12

s(7).Rows(2).Item(6) = 14

s(7).Rows(2).Item(7) = 2

s(7).Rows(2).Item(8) = 0

s(7).Rows(2).Item(9) = 6

s(7).Rows(2).Item(10) = 10

s(7).Rows(2).Item(11) = 13

s(7).Rows(2).Item(12) = 15

s(7).Rows(2).Item(13) = 3

65 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

s(7).Rows(2).Item(14) = 5

s(7).Rows(2).Item(15) = 8

s(7).Rows(3).Item(0) = 2

s(7).Rows(3).Item(1) = 1

s(7).Rows(3).Item(2) = 14

s(7).Rows(3).Item(3) = 7

s(7).Rows(3).Item(4) = 4

s(7).Rows(3).Item(5) = 10

s(7).Rows(3).Item(6) = 8

s(7).Rows(3).Item(7) = 13

s(7).Rows(3).Item(8) = 15

s(7).Rows(3).Item(9) = 12

s(7).Rows(3).Item(10) = 9

s(7).Rows(3).Item(11) = 0

s(7).Rows(3).Item(12) = 3

s(7).Rows(3).Item(13) = 5

s(7).Rows(3).Item(14) = 6

s(7).Rows(3).Item(15) = 11

dgs7.DataSource = s(7)

End Sub

Khôûi taïo giaù trò bieán

Sub khoitao()

ip = txtip.Text.Split(" ", ";", ":", ".")

'iptru = txtiptru.Text.Split(" ", " ", ";", ":", ".")

e = txte.Text.Split(" ", ";", ":", ".")

p = txtp.Text.Split(" ", ";", ":", ".")

pc1 = txtpc1.Text.Split(" ", ";", ":", ".")

pc2 = txtpc2.Text.Split(" ", ";", ":", ".")

66 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

khoitao_s0()

khoitao_s1()

khoitao_s2()

khoitao_s3()

khoitao_s4()

khoitao_s5()

khoitao_s6()

khoitao_s7()

End Sub

Caét bit cuoái

Function catbitcuoi(ByVal k As String) As String 'dua vao 64 bit tra ra 56 bit

Dim i As Integer = 0

Dim j As Integer

Dim tam As String

While i < 63

For j = i To i + 6

tam += k.Substring(j, 1)

Next

i = i + 8

End While

Return tam

End Function

Function hvpc1(ByVal k As String) As String

Dim tam(63) As Char

Dim i As Integer

For i = 0 To 63

tam(i) = k.Substring(i, 1)

67 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

Next

tam = catbitcuoi(tam)

For i = 0 To 55

tam(i) = k.Substring(Integer.Parse(pc1(i) - 1), 1)

Next

Return tam

End Function

Hoaù vò pc2

Function hvpc2(ByVal str As String) As String

Dim tam(47) As Char

Dim i As Integer

For i = 0 To 47

tam(i) = str.Substring(Integer.Parse(pc2(i) - 1), 1)

Next

Return tam

End Function

Function ls(ByVal s As String, ByVal n As Integer) As String

Return s.Substring(n, s.Length - n) + s.Substring(0, n)

End Function

Haøm taïo daõy khoaù

Sub taodaykhoa()

Dim khoa as String =

"0001001100110100010101110111100110011011101111001101111111110001"

Dim khoa As String = txtkhoak.Text

Dim j As Integer

If khoa.Length > 8 Then

khoa = txtkhoak.Text.Remove(8, khoa.Length - 8)

68 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

txtkhoak.Text = khoa

End If

Dim tam As String

For j = 0 To khoa.Length - 1

tam += bi_acsii(Asc(khoa.Substring(j, 1)))

Next

khoa = tam

Dim khoa1 As String = hvpc1(khoa)

Dim d(16) As String

Dim c(16) As String

c(0) = khoa1.Substring(0, 28)

c(0) = ls(c(0), 1)

d(0) = khoa1.Substring(28, 28)

d(0) = ls(d(0), 1)

daykhoa(0) = hvpc2(c(0) + d(0))

txtdaykhoa.Text += daykhoa(0) + Chr(9)

Dim i As Integer

For i = 1 To 15

If i = 2 - 1 Or i = 9 - 1 Or i = 16 - 1 Then

c(i) = ls(c(i - 1), 1)

d(i) = ls(d(i - 1), 1)

Else

c(i) = ls(c(i - 1), 2)

d(i) = ls(d(i - 1), 2)

End If

daykhoa(i) = hvpc2(c(i) + d(i))

txtdaykhoa.Text += daykhoa(i) + Chr(9)

Next i

69 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

End Sub

Moät soá haøm xöû lyù chuoãi nhaäp

Nhaäp nhò phaân

Sub binarynhap()

x = txtchuoinhap.Text

Dim y As String

Dim i As Integer

Dim j As Integer

Dim sokitudu As Integer = x.Length Mod 8

If sokitudu > 0 Then

Dim sokituthem As Integer = 8 - sokitudu

For i = 1 To sokituthem

x += " "

Next

End If

Dim sodaynhap As Integer = x.Length \ 8

ReDim daynhap(sodaynhap - 1)

For i = 0 To sodaynhap - 1

daynhap(i) = x.Substring(i * 8, 8)

y = ""

For j = 0 To daynhap(i).Length - 1

y += bi_acsii(Asc(daynhap(i).Substring(j, 1)))

Next

daynhap(i) = y

Next

End Sub

Function bi_acsii(ByVal int As Integer) As String

Dim tam(7) As Char

70 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

Dim i As Integer

For i = 0 To 7

tam(i) = (int Mod 2).ToString

int \= 2

Next

Array.Reverse(tam)

Return tam

End Function

Moät soá haøm maõ hoaù

Haøm hoaùn vò ip

Function hvip(ByVal x As String) As String

Dim tam(63) As Char

Dim i As Integer

For i = 0 To 63

tam(i) = x.Substring(ip(i) - 1, 1)

Next

Return tam

End Function

Haøm hoaùn vò e

Function hve(ByVal r As String) As String

Dim tam(47) As Char

Dim i As Integer

For i = 0 To 47

tam(i) = r.Substring(e(i) - 1, 1)

Next

Return tam

End Function

Function hvp(ByVal c As String) As String

71 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

Dim tam(31) As Char

Dim i As Integer

For i = 0 To 31

tam(i) = c.Substring(p(i) - 1, 1)

Next

Return tam

End Function

Haøm hoaùn vò ip tröø

Function hviptru(ByVal c As String) As String

Dim tam(63) As Char

Dim i As Integer

For i = 0 To 63

tam(ip(i) - 1) = c.Substring(i, 1)

Next

Return tam

End Function

Maõ hoaù

Function mahoa() As String

binarynhap()

Dim k As Integer

Dim y As String

For k = 0 To daynhap.Length - 1

'x += "0000000100100011010001010110011110001001101010101100110111101111"

x = daynhap(k)

Dim x0 As String = hvip(x)

Dim l(15) As String

72 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

Dim r(15) As String

Dim i, j As Integer

Dim l0 As String = x0.Substring(0, 32)

Dim r0 As String = x0.Substring(32, 32)

l(0) = r0

For i = 0 To 31

r(0) += (l0.Substring(i, 1) Xor f(r0, daykhoa(0)).Substring(i, 1)).ToString

Next

For i = 1 To 15

l(i) = r(i - 1)

Dim a As String = f(r(i - 1), daykhoa(i))

For j = 0 To 31

r(i) += (l(i - 1).Substring(j, 1) Xor a.Substring(j, 1)).ToString

Next j

Next i

Dim v As String = hviptru(r(15) + l(15))

y += v

Next k

Return y

End Function

Haøm f

Function f(ByVal r As String, ByVal k As String) As String

Dim i As Integer

Dim e As String

Dim hv As String = hve(r)

For i = 0 To 47

73 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

e += (hv.Substring(i, 1) Xor k.Substring(i, 1)).ToString

Next

Dim b(7) As String

Dim c As String

For i = 0 To 7

b(i) = e.Substring(i * 6, 6)

Dim haibitcuoi As String = b(i).Substring(0, 1) + b(i).Substring(5, 1)

Dim bonbitgiua As String = b(i).Substring(1, 4)

Dim srow = thapphan(haibitcuoi)

Dim scol = thapphan(bonbitgiua)

Dim sij As Integer = s(i).Rows(srow).Item(scol)

c += binary(sij)

Next

c = hvp(c)

Return c

End Function

Haøm thaäp phaân

Function thapphan(ByVal b As String) As Integer

Dim i As Integer

Dim tam As Integer = 0

For i = 0 To b.Length - 1

If b.Substring(i, 1) = 1 Then

tam += 2 ^ (b.Length - 1 - i)

End If

Next

Return tam

End Function

74 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

Haøm nhò phaân

Function binary(ByVal a As Integer) As String

Dim i As Integer

Dim tam(3) As Char

For i = 0 To 3

tam(i) = (a Mod 2).ToString

a = a \ 2

Next

Array.Reverse(tam)

Return tam

End Function

Haøm ñoåi ra chöõ

Function doirachu(ByVal y As String) As String

Dim tam As String = y

Dim tam1 As String = ""

Dim so As Integer

Dim i As Integer

Dim j As Integer

While i < tam.Length - 1

so = 0

For j = i To i + 7

If tam.Substring(j, 1) = 1 Then

so += 2 ^ (7 - (j - i))

End If

Next

tam1 += Chr(so)

i = i + 8

End While

75 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

Return tam1

End Function

#End Region

moät soá haøm duøng ñeå giaûi maõ

taïo baûn maõ nhò phaân

Sub binaybanma()

Dim sodaybanma = txtbanma.Text.Length \ 8

Dim i, j As Integer

Dim tam As String

ReDim daybanma(sodaybanma - 1)

For i = 0 To sodaybanma - 1

daybanma(i) = txtbanma.Text.Substring(i * 8, 8)

tam = ""

For j = 0 To daybanma(i).Length - 1

tam += bi_acsii(Asc(daybanma(i).Substring(j, 1)))

Next

daybanma(i) = tam

Next i

End Sub

Haøm giaûi maõ

Function giaima() As String

binaybanma()

Dim k As Integer

x = ""

For k = 0 To daybanma.Length - 1

Dim y0 As String = hvip(daybanma(k))

Dim rr As String = y0.Substring(0, 32)

Dim ll As String = y0.Substring(32, 32)

76 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

Dim i, j As Integer

Dim l(15) As String

Dim r(15) As String

r(15) = ll

For i = 0 To 31

l(15) += (rr.Substring(i, 1) Xor f(ll, daykhoa(15)).Substring(i, 1)).ToString

Next

For i = 14 To 0 Step -1

r(i) = l(i + 1)

Dim a As String = f(l(i + 1), daykhoa(i))

For j = 0 To 31

l(i) += (r(i + 1).Substring(j, 1) Xor a.Substring(j, 1)).ToString

Next j

Next i

x += hviptru(l(0) + r(0))

Next k

Return x

End Function

Moät soá söï kieän giuùp cho vieäc thöïc thi

Private Sub des_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

khoitao()

End Sub

Private Sub btlapma_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btlapma.Click

khoitao()

If txtchuoinhap.Text = "" Then

77 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

MessageBox.Show("Bạn hãy nhập vào chuỗi cần mã hoá")

txtchuoinhap.Focus()

Return

End If

If txtkhoak.Text = "" Or txtkhoak.Text.Length < 8 Then

MessageBox.Show("Bạn hãy nhập vào khóa :8 kí tự")

txtkhoak.Focus()

Return

End If

txtdaykhoa.Text = ""

taodaykhoa()

txtbanmabit.Text = mahoa()

txtbanma.Text = doirachu(mahoa())

End Sub

Private Sub btthoat_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btthoat.Click

Me.Close()

End Sub

Private Sub btgiaima_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btgiaima.Click

If txtkhoak.Text = "" Or txtkhoak.Text.Length < 8 Then

MessageBox.Show("Bạn hãy nhập khóa : 8 kí tự")

txtkhoak.Focus()

Return

End If

If txtbanma.Text = "" Then

MessageBox.Show("Bạn hãy nhập vào chuỗi cần giải mã")

txtbanma.Focus()

78 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

Return

End If

txtdaykhoa.Text = ""

taodaykhoa()

txtbanrobit.Text = giaima()

txtbanro.Text = doirachu(giaima())

End Sub

End Class

Form thaùm maõ Des (thamma.vb)

79 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

Imports System.Windows.Forms

Public Class thammades Inherits System.Windows.Forms.Form

Khai baùo moät soá bieán vaø haøm

Dim banro() As String

Dim banma() As String

Dim hve(47) As Integer

Dim hvp(31) As Integer

Dim hvpc2(47) As Integer

Dim hvpc1(55) As Integer

Dim hvip(63) As Integer

Dim e() As String

80 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

Dim esao() As String

Dim ephay() As String

Dim cphay() As String

Dim jhop(7, 63) As Integer

Dim s(7) As DataTable

Dim chuoikhoa(255) As String

Dim daykhoa(2) As String

Dim n As Integer '6 ban ro va 6 ban ma

Const m = 16 '8 ki tu

Const hebit = 4 'he 256

Dim flag As Boolean

Khôûi taïo

Sub khoitao_s0()

Dim i As Integer

s(0) = New DataTable

For i = 0 To 15

Dim col As DataColumn = New DataColumn

s(0).Columns.Add(col)

Next

For i = 0 To 3

Dim row As DataRow = s(0).NewRow

s(0).Rows.Add(row)

Next

s(0).Rows(0).Item(0) = 14

s(0).Rows(0).Item(1) = 4

s(0).Rows(0).Item(2) = 13

s(0).Rows(0).Item(3) = 1

s(0).Rows(0).Item(4) = 2

81 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

s(0).Rows(0).Item(5) = 15

s(0).Rows(0).Item(6) = 11

s(0).Rows(0).Item(7) = 8

s(0).Rows(0).Item(8) = 3

s(0).Rows(0).Item(9) = 10

s(0).Rows(0).Item(10) = 6

s(0).Rows(0).Item(11) = 12

s(0).Rows(0).Item(12) = 5

s(0).Rows(0).Item(13) = 9

s(0).Rows(0).Item(14) = 0

s(0).Rows(0).Item(15) = 7

s(0).Rows(1).Item(0) = 0

s(0).Rows(1).Item(1) = 15

s(0).Rows(1).Item(2) = 7

s(0).Rows(1).Item(3) = 4

s(0).Rows(1).Item(4) = 14

s(0).Rows(1).Item(5) = 2

s(0).Rows(1).Item(6) = 13

s(0).Rows(1).Item(7) = 1

s(0).Rows(1).Item(8) = 10

s(0).Rows(1).Item(9) = 6

s(0).Rows(1).Item(10) = 12

s(0).Rows(1).Item(11) = 11

s(0).Rows(1).Item(12) = 9

s(0).Rows(1).Item(13) = 5

s(0).Rows(1).Item(14) = 3

s(0).Rows(1).Item(15) = 8

s(0).Rows(2).Item(0) = 4

82 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

s(0).Rows(2).Item(1) = 1

s(0).Rows(2).Item(2) = 14

s(0).Rows(2).Item(3) = 8

s(0).Rows(2).Item(4) = 13

s(0).Rows(2).Item(5) = 6

s(0).Rows(2).Item(6) = 2

s(0).Rows(2).Item(7) = 11

s(0).Rows(2).Item(8) = 15

s(0).Rows(2).Item(9) = 12

s(0).Rows(2).Item(10) = 9

s(0).Rows(2).Item(11) = 7

s(0).Rows(2).Item(12) = 3

s(0).Rows(2).Item(13) = 10

s(0).Rows(2).Item(14) = 5

s(0).Rows(2).Item(15) = 0

s(0).Rows(3).Item(0) = 15

s(0).Rows(3).Item(1) = 12

s(0).Rows(3).Item(2) = 8

s(0).Rows(3).Item(3) = 2

s(0).Rows(3).Item(4) = 4

s(0).Rows(3).Item(5) = 9

s(0).Rows(3).Item(6) = 1

s(0).Rows(3).Item(7) = 7

s(0).Rows(3).Item(8) = 5

s(0).Rows(3).Item(9) = 11

s(0).Rows(3).Item(10) = 3

s(0).Rows(3).Item(11) = 14

s(0).Rows(3).Item(12) = 10

83 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

s(0).Rows(3).Item(13) = 0

s(0).Rows(3).Item(14) = 6

s(0).Rows(3).Item(15) = 13

End Sub

Khôûi taïo haøm s1

Sub khoitao_s1()

Dim i As Integer

s(1) = New DataTable

For i = 0 To 15

Dim col As DataColumn = New DataColumn

s(1).Columns.Add(col)

Next

For i = 0 To 3

Dim row As DataRow = s(1).NewRow

s(1).Rows.Add(row)

Next

s(1).Rows(0).Item(0) = 15

s(1).Rows(0).Item(1) = 1

s(1).Rows(0).Item(2) = 8

s(1).Rows(0).Item(3) = 14

s(1).Rows(0).Item(4) = 6

s(1).Rows(0).Item(5) = 11

s(1).Rows(0).Item(6) = 3

s(1).Rows(0).Item(7) = 4

s(1).Rows(0).Item(8) = 9

s(1).Rows(0).Item(9) = 7

s(1).Rows(0).Item(10) = 2

s(1).Rows(0).Item(11) = 13

84 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

s(1).Rows(0).Item(12) = 12

s(1).Rows(0).Item(13) = 0

s(1).Rows(0).Item(14) = 5

s(1).Rows(0).Item(15) = 10

s(1).Rows(1).Item(0) = 3

s(1).Rows(1).Item(1) = 13

s(1).Rows(1).Item(2) = 4

s(1).Rows(1).Item(3) = 7

s(1).Rows(1).Item(4) = 15

s(1).Rows(1).Item(5) = 2

s(1).Rows(1).Item(6) = 8

s(1).Rows(1).Item(7) = 14

s(1).Rows(1).Item(8) = 12

s(1).Rows(1).Item(9) = 0

s(1).Rows(1).Item(10) = 1

s(1).Rows(1).Item(11) = 10

s(1).Rows(1).Item(12) = 6

s(1).Rows(1).Item(13) = 9

s(1).Rows(1).Item(14) = 11

s(1).Rows(1).Item(15) = 5

s(1).Rows(2).Item(0) = 0

s(1).Rows(2).Item(1) = 14

s(1).Rows(2).Item(2) = 7

s(1).Rows(2).Item(3) = 11

s(1).Rows(2).Item(4) = 10

s(1).Rows(2).Item(5) = 4

s(1).Rows(2).Item(6) = 13

s(1).Rows(2).Item(7) = 1

85 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

s(1).Rows(2).Item(8) = 5

s(1).Rows(2).Item(9) = 8

s(1).Rows(2).Item(10) = 12

s(1).Rows(2).Item(11) = 6

s(1).Rows(2).Item(12) = 9

s(1).Rows(2).Item(13) = 3

s(1).Rows(2).Item(14) = 2

s(1).Rows(2).Item(15) = 15

s(1).Rows(3).Item(0) = 13

s(1).Rows(3).Item(1) = 8

s(1).Rows(3).Item(2) = 10

s(1).Rows(3).Item(3) = 1

s(1).Rows(3).Item(4) = 3

s(1).Rows(3).Item(5) = 15

s(1).Rows(3).Item(6) = 4

s(1).Rows(3).Item(7) = 2

s(1).Rows(3).Item(8) = 11

s(1).Rows(3).Item(9) = 6

s(1).Rows(3).Item(10) = 7

s(1).Rows(3).Item(11) = 12

s(1).Rows(3).Item(12) = 0

s(1).Rows(3).Item(13) = 5

s(1).Rows(3).Item(14) = 14

s(1).Rows(3).Item(15) = 9

End Sub

Khôûi taïo haøm s2

Sub khoitao_s2()

Dim i As Integer

86 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

s(2) = New DataTable

For i = 0 To 15

Dim col As DataColumn = New DataColumn

s(2).Columns.Add(col)

Next

For i = 0 To 3

Dim row As DataRow = s(2).NewRow

s(2).Rows.Add(row)

Next

s(2).Rows(0).Item(0) = 10

s(2).Rows(0).Item(1) = 0

s(2).Rows(0).Item(2) = 9

s(2).Rows(0).Item(3) = 14

s(2).Rows(0).Item(4) = 6

s(2).Rows(0).Item(5) = 3

s(2).Rows(0).Item(6) = 15

s(2).Rows(0).Item(7) = 5

s(2).Rows(0).Item(8) = 1

s(2).Rows(0).Item(9) = 13

s(2).Rows(0).Item(10) = 12

s(2).Rows(0).Item(11) = 7

s(2).Rows(0).Item(12) = 11

s(2).Rows(0).Item(13) = 4

s(2).Rows(0).Item(14) = 2

s(2).Rows(0).Item(15) = 8

s(2).Rows(1).Item(0) = 13

s(2).Rows(1).Item(1) = 7

s(2).Rows(1).Item(2) = 0

87 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

s(2).Rows(1).Item(3) = 9

s(2).Rows(1).Item(4) = 3

s(2).Rows(1).Item(5) = 4

s(2).Rows(1).Item(6) = 6

s(2).Rows(1).Item(7) = 10

s(2).Rows(1).Item(8) = 2

s(2).Rows(1).Item(9) = 8

s(2).Rows(1).Item(10) = 5

s(2).Rows(1).Item(11) = 14

s(2).Rows(1).Item(12) = 12

s(2).Rows(1).Item(13) = 11

s(2).Rows(1).Item(14) = 15

s(2).Rows(1).Item(15) = 1

s(2).Rows(2).Item(0) = 13

s(2).Rows(2).Item(1) = 6

s(2).Rows(2).Item(2) = 4

s(2).Rows(2).Item(3) = 9

s(2).Rows(2).Item(4) = 8

s(2).Rows(2).Item(5) = 15

s(2).Rows(2).Item(6) = 3

s(2).Rows(2).Item(7) = 0

s(2).Rows(2).Item(8) = 11

s(2).Rows(2).Item(9) = 1

s(2).Rows(2).Item(10) = 2

s(2).Rows(2).Item(11) = 12

s(2).Rows(2).Item(12) = 5

s(2).Rows(2).Item(13) = 10

s(2).Rows(2).Item(14) = 14

88 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

s(2).Rows(2).Item(15) = 7

s(2).Rows(3).Item(0) = 1

s(2).Rows(3).Item(1) = 10

s(2).Rows(3).Item(2) = 13

s(2).Rows(3).Item(3) = 0

s(2).Rows(3).Item(4) = 6

s(2).Rows(3).Item(5) = 9

s(2).Rows(3).Item(6) = 8

s(2).Rows(3).Item(7) = 7

s(2).Rows(3).Item(8) = 4

s(2).Rows(3).Item(9) = 15

s(2).Rows(3).Item(10) = 14

s(2).Rows(3).Item(11) = 3

s(2).Rows(3).Item(12) = 11

s(2).Rows(3).Item(13) = 5

s(2).Rows(3).Item(14) = 3

s(2).Rows(3).Item(15) = 12

End Sub

Khôûi taïo haøm s3

Sub khoitao_s3()

Dim i As Integer

s(3) = New DataTable

For i = 0 To 15

Dim col As DataColumn = New DataColumn

s(3).Columns.Add(col)

Next

For i = 0 To 3

Dim row As DataRow = s(3).NewRow

89 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

s(3).Rows.Add(row)

Next

s(3).Rows(0).Item(0) = 7

s(3).Rows(0).Item(1) = 13

s(3).Rows(0).Item(2) = 14

s(3).Rows(0).Item(3) = 3

s(3).Rows(0).Item(4) = 0

s(3).Rows(0).Item(5) = 6

s(3).Rows(0).Item(6) = 9

s(3).Rows(0).Item(7) = 10

s(3).Rows(0).Item(8) = 1

s(3).Rows(0).Item(9) = 2

s(3).Rows(0).Item(10) = 8

s(3).Rows(0).Item(11) = 5

s(3).Rows(0).Item(12) = 11

s(3).Rows(0).Item(13) = 12

s(3).Rows(0).Item(14) = 4

s(3).Rows(0).Item(15) = 15

s(3).Rows(1).Item(0) = 13

s(3).Rows(1).Item(1) = 8

s(3).Rows(1).Item(2) = 11

s(3).Rows(1).Item(3) = 5

s(3).Rows(1).Item(4) = 6

s(3).Rows(1).Item(5) = 15

s(3).Rows(1).Item(6) = 0

s(3).Rows(1).Item(7) = 3

s(3).Rows(1).Item(8) = 4

s(3).Rows(1).Item(9) = 7

90 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

s(3).Rows(1).Item(10) = 2

s(3).Rows(1).Item(11) = 12

s(3).Rows(1).Item(12) = 1

s(3).Rows(1).Item(13) = 10

s(3).Rows(1).Item(14) = 14

s(3).Rows(1).Item(15) = 9

s(3).Rows(2).Item(0) = 10

s(3).Rows(2).Item(1) = 6

s(3).Rows(2).Item(2) = 9

s(3).Rows(2).Item(3) = 0

s(3).Rows(2).Item(4) = 12

s(3).Rows(2).Item(5) = 11

s(3).Rows(2).Item(6) = 7

s(3).Rows(2).Item(7) = 13

s(3).Rows(2).Item(8) = 15

s(3).Rows(2).Item(9) = 1

s(3).Rows(2).Item(10) = 3

s(3).Rows(2).Item(11) = 14

s(3).Rows(2).Item(12) = 5

s(3).Rows(2).Item(13) = 2

s(3).Rows(2).Item(14) = 8

s(3).Rows(2).Item(15) = 4

s(3).Rows(3).Item(0) = 3

s(3).Rows(3).Item(1) = 15

s(3).Rows(3).Item(2) = 0

s(3).Rows(3).Item(3) = 6

s(3).Rows(3).Item(4) = 10

s(3).Rows(3).Item(5) = 1

91 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

s(3).Rows(3).Item(6) = 13

s(3).Rows(3).Item(7) = 8

s(3).Rows(3).Item(8) = 9

s(3).Rows(3).Item(9) = 4

s(3).Rows(3).Item(10) = 5

s(3).Rows(3).Item(11) = 11

s(3).Rows(3).Item(12) = 12

s(3).Rows(3).Item(13) = 7

s(3).Rows(3).Item(14) = 2

s(3).Rows(3).Item(15) = 14

End Sub

Khôûi taïo haøm s4

Sub khoitao_s4()

Dim i As Integer

s(4) = New DataTable

For i = 0 To 15

Dim col As DataColumn = New DataColumn

s(4).Columns.Add(col)

Next

For i = 0 To 3

Dim row As DataRow = s(4).NewRow

s(4).Rows.Add(row)

Next

s(4).Rows(0).Item(0) = 2

s(4).Rows(0).Item(1) = 12

s(4).Rows(0).Item(2) = 4

s(4).Rows(0).Item(3) = 1

s(4).Rows(0).Item(4) = 7

92 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

s(4).Rows(0).Item(5) = 10

s(4).Rows(0).Item(6) = 11

s(4).Rows(0).Item(7) = 6

s(4).Rows(0).Item(8) = 8

s(4).Rows(0).Item(9) = 5

s(4).Rows(0).Item(10) = 3

s(4).Rows(0).Item(11) = 15

s(4).Rows(0).Item(12) = 13

s(4).Rows(0).Item(13) = 0

s(4).Rows(0).Item(14) = 14

s(4).Rows(0).Item(15) = 9

s(4).Rows(1).Item(0) = 14

s(4).Rows(1).Item(1) = 11

s(4).Rows(1).Item(2) = 2

s(4).Rows(1).Item(3) = 12

s(4).Rows(1).Item(4) = 4

s(4).Rows(1).Item(5) = 7

s(4).Rows(1).Item(6) = 13

s(4).Rows(1).Item(7) = 1

s(4).Rows(1).Item(8) = 5

s(4).Rows(1).Item(9) = 0

s(4).Rows(1).Item(10) = 15

s(4).Rows(1).Item(11) = 10

s(4).Rows(1).Item(12) = 3

s(4).Rows(1).Item(13) = 9

s(4).Rows(1).Item(14) = 8

s(4).Rows(1).Item(15) = 6

s(4).Rows(2).Item(0) = 4

93 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

s(4).Rows(2).Item(1) = 2

s(4).Rows(2).Item(2) = 1

s(4).Rows(2).Item(3) = 11

s(4).Rows(2).Item(4) = 10

s(4).Rows(2).Item(5) = 13

s(4).Rows(2).Item(6) = 7

s(4).Rows(2).Item(7) = 8

s(4).Rows(2).Item(8) = 15

s(4).Rows(2).Item(9) = 9

s(4).Rows(2).Item(10) = 12

s(4).Rows(2).Item(11) = 5

s(4).Rows(2).Item(12) = 6

s(4).Rows(2).Item(13) = 3

s(4).Rows(2).Item(14) = 0

s(4).Rows(2).Item(15) = 14

s(4).Rows(3).Item(0) = 11

s(4).Rows(3).Item(1) = 8

s(4).Rows(3).Item(2) = 12

s(4).Rows(3).Item(3) = 7

s(4).Rows(3).Item(4) = 0

s(4).Rows(3).Item(5) = 14

s(4).Rows(3).Item(6) = 2

s(4).Rows(3).Item(7) = 13

s(4).Rows(3).Item(8) = 6

s(4).Rows(3).Item(9) = 15

s(4).Rows(3).Item(10) = 0

s(4).Rows(3).Item(11) = 9

s(4).Rows(3).Item(12) = 10

94 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

s(4).Rows(3).Item(13) = 4

s(4).Rows(3).Item(14) = 5

s(4).Rows(3).Item(15) = 3

End Sub

Khôûi taïo haøm s5

Sub khoitao_s5()

Dim i As Integer

s(5) = New DataTable

For i = 0 To 15

Dim col As DataColumn = New DataColumn

s(5).Columns.Add(col)

Next

For i = 0 To 3

Dim row As DataRow = s(5).NewRow

s(5).Rows.Add(row)

Next

s(5).Rows(0).Item(0) = 12

s(5).Rows(0).Item(1) = 1

s(5).Rows(0).Item(2) = 10

s(5).Rows(0).Item(3) = 15

s(5).Rows(0).Item(4) = 9

s(5).Rows(0).Item(5) = 2

s(5).Rows(0).Item(6) = 6

s(5).Rows(0).Item(7) = 8

s(5).Rows(0).Item(8) = 0

s(5).Rows(0).Item(9) = 13

s(5).Rows(0).Item(10) = 3

s(5).Rows(0).Item(11) = 4

95 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

s(5).Rows(0).Item(12) = 14

s(5).Rows(0).Item(13) = 7

s(5).Rows(0).Item(14) = 5

s(5).Rows(0).Item(15) = 11

s(5).Rows(1).Item(0) = 10

s(5).Rows(1).Item(1) = 15

s(5).Rows(1).Item(2) = 4

s(5).Rows(1).Item(3) = 2

s(5).Rows(1).Item(4) = 7

s(5).Rows(1).Item(5) = 12

s(5).Rows(1).Item(6) = 9

s(5).Rows(1).Item(7) = 5

s(5).Rows(1).Item(8) = 6

s(5).Rows(1).Item(9) = 1

s(5).Rows(1).Item(10) = 13

s(5).Rows(1).Item(11) = 14

s(5).Rows(1).Item(12) = 0

s(5).Rows(1).Item(13) = 11

s(5).Rows(1).Item(14) = 3

s(5).Rows(1).Item(15) = 8

s(5).Rows(2).Item(0) = 9

s(5).Rows(2).Item(1) = 14

s(5).Rows(2).Item(2) = 15

s(5).Rows(2).Item(3) = 5

s(5).Rows(2).Item(4) = 2

s(5).Rows(2).Item(5) = 8

s(5).Rows(2).Item(6) = 12

s(5).Rows(2).Item(7) = 3

96 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

s(5).Rows(2).Item(8) = 7

s(5).Rows(2).Item(9) = 0

s(5).Rows(2).Item(10) = 4

s(5).Rows(2).Item(11) = 10

s(5).Rows(2).Item(12) = 1

s(5).Rows(2).Item(13) = 13

s(5).Rows(2).Item(14) = 11

s(5).Rows(2).Item(15) = 6

s(5).Rows(3).Item(0) = 4

s(5).Rows(3).Item(1) = 3

s(5).Rows(3).Item(2) = 2

s(5).Rows(3).Item(3) = 12

s(5).Rows(3).Item(4) = 9

s(5).Rows(3).Item(5) = 5

s(5).Rows(3).Item(6) = 15

s(5).Rows(3).Item(7) = 10

s(5).Rows(3).Item(8) = 11

s(5).Rows(3).Item(9) = 14

s(5).Rows(3).Item(10) = 1

s(5).Rows(3).Item(11) = 7

s(5).Rows(3).Item(12) = 6

s(5).Rows(3).Item(13) = 0

s(5).Rows(3).Item(14) = 8

s(5).Rows(3).Item(15) = 13

End Sub

Khôûi taïo haøm s6

Sub khoitao_s6()

Dim i As Integer

97 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

s(6) = New DataTable

For i = 0 To 15

Dim col As DataColumn = New DataColumn

s(6).Columns.Add(col)

Next

For i = 0 To 3

Dim row As DataRow = s(6).NewRow

s(6).Rows.Add(row)

Next

s(6).Rows(0).Item(0) = 4

s(6).Rows(0).Item(1) = 11

s(6).Rows(0).Item(2) = 2

s(6).Rows(0).Item(3) = 14

s(6).Rows(0).Item(4) = 15

s(6).Rows(0).Item(5) = 0

s(6).Rows(0).Item(6) = 8

s(6).Rows(0).Item(7) = 13

s(6).Rows(0).Item(8) = 3

s(6).Rows(0).Item(9) = 12

s(6).Rows(0).Item(10) = 9

s(6).Rows(0).Item(11) = 7

s(6).Rows(0).Item(12) = 5

s(6).Rows(0).Item(13) = 10

s(6).Rows(0).Item(14) = 6

s(6).Rows(0).Item(15) = 1

s(6).Rows(1).Item(0) = 13

s(6).Rows(1).Item(1) = 0

s(6).Rows(1).Item(2) = 11

98 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

s(6).Rows(1).Item(3) = 7

s(6).Rows(1).Item(4) = 4

s(6).Rows(1).Item(5) = 9

s(6).Rows(1).Item(6) = 1

s(6).Rows(1).Item(7) = 10

s(6).Rows(1).Item(8) = 14

s(6).Rows(1).Item(9) = 3

s(6).Rows(1).Item(10) = 5

s(6).Rows(1).Item(11) = 12

s(6).Rows(1).Item(12) = 2

s(6).Rows(1).Item(13) = 15

s(6).Rows(1).Item(14) = 8

s(6).Rows(1).Item(15) = 6

s(6).Rows(2).Item(0) = 1

s(6).Rows(2).Item(1) = 4

s(6).Rows(2).Item(2) = 11

s(6).Rows(2).Item(3) = 13

s(6).Rows(2).Item(4) = 12

s(6).Rows(2).Item(5) = 3

s(6).Rows(2).Item(6) = 7

s(6).Rows(2).Item(7) = 14

s(6).Rows(2).Item(8) = 10

s(6).Rows(2).Item(9) = 15

s(6).Rows(2).Item(10) = 6

s(6).Rows(2).Item(11) = 8

s(6).Rows(2).Item(12) = 0

s(6).Rows(2).Item(13) = 5

s(6).Rows(2).Item(14) = 9

99 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

s(6).Rows(2).Item(15) = 2

s(6).Rows(3).Item(0) = 6

s(6).Rows(3).Item(1) = 11

s(6).Rows(3).Item(2) = 13

s(6).Rows(3).Item(3) = 8

s(6).Rows(3).Item(4) = 1

s(6).Rows(3).Item(5) = 4

s(6).Rows(3).Item(6) = 10

s(6).Rows(3).Item(7) = 7

s(6).Rows(3).Item(8) = 9

s(6).Rows(3).Item(9) = 5

s(6).Rows(3).Item(10) = 0

s(6).Rows(3).Item(11) = 15

s(6).Rows(3).Item(12) = 14

s(6).Rows(3).Item(13) = 2

s(6).Rows(3).Item(14) = 3

s(6).Rows(3).Item(15) = 12

End Sub

Khôûi taïo haøm s7

Sub khoitao_s7()

Dim i As Integer

s(7) = New DataTable

For i = 0 To 15

Dim col As DataColumn = New DataColumn

s(7).Columns.Add(col)

Next

For i = 0 To 3

Dim row As DataRow = s(7).NewRow

100 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

s(7).Rows.Add(row)

Next

s(7).Rows(0).Item(0) = 13

s(7).Rows(0).Item(1) = 2

s(7).Rows(0).Item(2) = 8

s(7).Rows(0).Item(3) = 4

s(7).Rows(0).Item(4) = 6

s(7).Rows(0).Item(5) = 15

s(7).Rows(0).Item(6) = 11

s(7).Rows(0).Item(7) = 1

s(7).Rows(0).Item(8) = 10

s(7).Rows(0).Item(9) = 9

s(7).Rows(0).Item(10) = 3

s(7).Rows(0).Item(11) = 14

s(7).Rows(0).Item(12) = 5

s(7).Rows(0).Item(13) = 0

s(7).Rows(0).Item(14) = 12

s(7).Rows(0).Item(15) = 7

s(7).Rows(1).Item(0) = 1

s(7).Rows(1).Item(1) = 15

s(7).Rows(1).Item(2) = 13

s(7).Rows(1).Item(3) = 8

s(7).Rows(1).Item(4) = 10

s(7).Rows(1).Item(5) = 3

s(7).Rows(1).Item(6) = 7

s(7).Rows(1).Item(7) = 4

s(7).Rows(1).Item(8) = 12

s(7).Rows(1).Item(9) = 5

101 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

s(7).Rows(1).Item(10) = 6

s(7).Rows(1).Item(11) = 11

s(7).Rows(1).Item(12) = 0

s(7).Rows(1).Item(13) = 14

s(7).Rows(1).Item(14) = 9

s(7).Rows(1).Item(15) = 2

s(7).Rows(2).Item(0) = 7

s(7).Rows(2).Item(1) = 11

s(7).Rows(2).Item(2) = 4

s(7).Rows(2).Item(3) = 1

s(7).Rows(2).Item(4) = 9

s(7).Rows(2).Item(5) = 12

s(7).Rows(2).Item(6) = 14

s(7).Rows(2).Item(7) = 2

s(7).Rows(2).Item(8) = 0

s(7).Rows(2).Item(9) = 6

s(7).Rows(2).Item(10) = 10

s(7).Rows(2).Item(11) = 13

s(7).Rows(2).Item(12) = 15

s(7).Rows(2).Item(13) = 3

s(7).Rows(2).Item(14) = 5

s(7).Rows(2).Item(15) = 8

s(7).Rows(3).Item(0) = 2

s(7).Rows(3).Item(1) = 1

s(7).Rows(3).Item(2) = 14

s(7).Rows(3).Item(3) = 7

s(7).Rows(3).Item(4) = 4

s(7).Rows(3).Item(5) = 10

102 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

s(7).Rows(3).Item(6) = 8

s(7).Rows(3).Item(7) = 13

s(7).Rows(3).Item(8) = 15

s(7).Rows(3).Item(9) = 12

s(7).Rows(3).Item(10) = 9

s(7).Rows(3).Item(11) = 0

s(7).Rows(3).Item(12) = 3

s(7).Rows(3).Item(13) = 5

s(7).Rows(3).Item(14) = 6

s(7).Rows(3).Item(15) = 11

End Sub

Khôûi taïo hoaùn vò e

Sub khoitao_hve()

hve(0) = 32

hve(1) = 1

hve(2) = 2

hve(3) = 3

hve(4) = 4

hve(5) = 5

hve(6) = 4

hve(7) = 5

hve(8) = 6

hve(9) = 7

hve(10) = 8

hve(11) = 9

hve(12) = 8

hve(13) = 9

hve(14) = 10

103 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

hve(15) = 11

hve(16) = 12

hve(17) = 13

hve(18) = 12

hve(19) = 13

hve(20) = 14

hve(21) = 15

hve(22) = 16

hve(23) = 17

hve(24) = 16

hve(25) = 17

hve(26) = 18

hve(27) = 19

hve(28) = 20

hve(29) = 21

hve(30) = 20

hve(31) = 21

hve(32) = 22

hve(33) = 23

hve(34) = 24

hve(35) = 25

hve(36) = 24

hve(37) = 25

hve(38) = 26

hve(39) = 27

hve(40) = 28

hve(41) = 29

hve(42) = 28

104 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

hve(43) = 29

hve(44) = 30

hve(45) = 31

hve(46) = 32

hve(47) = 1

End Sub

Khôûi taïo hoaùn vò p

Sub khoitao_hvp()

hvp(0) = 16

hvp(1) = 7

hvp(2) = 20

hvp(3) = 21

hvp(4) = 29

hvp(5) = 12

hvp(6) = 28

hvp(7) = 17

hvp(8) = 1

hvp(9) = 15

hvp(10) = 23

hvp(11) = 26

hvp(12) = 5

hvp(13) = 18

hvp(14) = 31

hvp(15) = 10

hvp(16) = 2

hvp(17) = 8

hvp(18) = 24

hvp(19) = 14

105 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

hvp(20) = 32

hvp(21) = 27

hvp(22) = 3

hvp(23) = 9

hvp(24) = 19

hvp(25) = 13

hvp(26) = 30

hvp(27) = 6

hvp(28) = 22

hvp(29) = 11

hvp(30) = 4

hvp(31) = 25

End Sub

Khôûi taïo hoaùn vò pc2

Sub khoitao_hvpc2()

hvpc2(0) = 14

hvpc2(1) = 17

hvpc2(2) = 11

hvpc2(3) = 24

hvpc2(4) = 1

hvpc2(5) = 5

hvpc2(6) = 3

hvpc2(7) = 28

hvpc2(8) = 15

hvpc2(9) = 6

hvpc2(10) = 21

hvpc2(11) = 10

hvpc2(12) = 23

106 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

hvpc2(13) = 19

hvpc2(14) = 12

hvpc2(15) = 4

hvpc2(16) = 26

hvpc2(17) = 8

hvpc2(18) = 16

hvpc2(19) = 7

hvpc2(20) = 27

hvpc2(21) = 20

hvpc2(22) = 13

hvpc2(23) = 2

hvpc2(24) = 41

hvpc2(25) = 52

hvpc2(26) = 31

hvpc2(27) = 37

hvpc2(28) = 47

hvpc2(29) = 55

hvpc2(30) = 30

hvpc2(31) = 40

hvpc2(32) = 51

hvpc2(33) = 45

hvpc2(34) = 33

hvpc2(35) = 48

hvpc2(36) = 44

hvpc2(37) = 49

hvpc2(38) = 39

hvpc2(39) = 56

hvpc2(40) = 34

107 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

hvpc2(41) = 53

hvpc2(42) = 46

hvpc2(43) = 42

hvpc2(44) = 50

hvpc2(45) = 36

hvpc2(46) = 29

hvpc2(47) = 32

End Sub

Khôûi taïo hoaù vò pc1

Sub khoitao_hvpc1()

hvpc1(0) = 57

hvpc1(1) = 49

hvpc1(2) = 41

hvpc1(3) = 33

hvpc1(4) = 25

hvpc1(5) = 17

hvpc1(6) = 9

hvpc1(7) = 1

hvpc1(8) = 58

hvpc1(9) = 50

hvpc1(10) = 42

hvpc1(11) = 34

hvpc1(12) = 26

hvpc1(13) = 18

hvpc1(14) = 10

hvpc1(15) = 2

hvpc1(16) = 59

hvpc1(17) = 51

108 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

hvpc1(18) = 43

hvpc1(19) = 35

hvpc1(20) = 27

hvpc1(21) = 19

hvpc1(22) = 11

hvpc1(23) = 3

hvpc1(24) = 60

hvpc1(25) = 52

hvpc1(26) = 44

hvpc1(27) = 36

hvpc1(28) = 63

hvpc1(29) = 55

hvpc1(30) = 47

hvpc1(31) = 39

hvpc1(32) = 31

hvpc1(33) = 23

hvpc1(34) = 15

hvpc1(35) = 7

hvpc1(36) = 62

hvpc1(37) = 54

hvpc1(38) = 46

hvpc1(39) = 38

hvpc1(40) = 30

hvpc1(41) = 22

hvpc1(42) = 14

hvpc1(43) = 6

hvpc1(44) = 61

hvpc1(45) = 53

109 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

hvpc1(46) = 45

hvpc1(47) = 37

hvpc1(48) = 29

hvpc1(49) = 21

hvpc1(50) = 13

hvpc1(51) = 5

hvpc1(52) = 28

hvpc1(53) = 20

hvpc1(54) = 12

hvpc1(55) = 4

End Sub

Khôûi taïo hoaù vò ip

Sub khoitao_hvip()

hvip(0) = 58

hvip(1) = 50

hvip(2) = 42

hvip(3) = 34

hvip(4) = 26

hvip(5) = 18

hvip(6) = 10

hvip(7) = 2

hvip(8) = 60

hvip(9) = 52

hvip(10) = 44

hvip(11) = 36

hvip(12) = 28

hvip(13) = 20

hvip(14) = 12

110 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

hvip(15) = 4

hvip(16) = 62

hvip(17) = 54

hvip(18) = 46

hvip(19) = 38

hvip(20) = 30

hvip(21) = 22

hvip(22) = 14

hvip(23) = 6

hvip(24) = 64

hvip(25) = 56

hvip(26) = 48

hvip(27) = 40

hvip(28) = 32

hvip(29) = 24

hvip(30) = 16

hvip(31) = 8

hvip(32) = 57

hvip(33) = 49

hvip(34) = 41

hvip(35) = 33

hvip(36) = 25

hvip(37) = 17

hvip(38) = 9

hvip(39) = 1

hvip(40) = 59

hvip(41) = 51

hvip(42) = 43

111 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

hvip(43) = 35

hvip(44) = 27

hvip(45) = 19

hvip(46) = 11

hvip(47) = 3

hvip(48) = 61

hvip(49) = 53

hvip(50) = 45

hvip(51) = 37

hvip(52) = 29

hvip(53) = 21

hvip(54) = 13

hvip(55) = 5

hvip(56) = 63

hvip(57) = 55

hvip(58) = 47

hvip(59) = 39

hvip(60) = 31

hvip(61) = 23

hvip(62) = 15

hvip(63) = 7

End Sub

Khôûi taïo caùc haøm

Sub khoitao()

khoitao_s0()

khoitao_s1()

khoitao_s2()

khoitao_s3()

112 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

khoitao_s4()

khoitao_s5()

khoitao_s6()

khoitao_s7()

khoitao_hve()

khoitao_hvp()

khoitao_hvpc2()

khoitao_hvpc1()

khoitao_hvip()

End Sub

caùc haøm hoaùn vò

Haøm hoaùn vò ip

Function hoanvi_ip(ByVal x As String) As String

Dim tam(63) As Char

Dim i As Integer

For i = 0 To 63

tam(i) = x.Substring(hvip(i) - 1, 1)

Next

Return tam

End Function

Haøm hoaùn vò iptru

Function hoanvi_iptru(ByVal c As String) As String

Dim tam(63) As Char

Dim i As Integer

For i = 0 To 63

tam(hvip(i) - 1) = c.Substring(i, 1)

Next

Return tam

113 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

End Function

Haøm hoaùn vò e

Function hoanvi_e(ByVal r As String) As String

Dim tam(47) As Char

Dim i As Integer

For i = 0 To 47

tam(i) = r.Substring(hve(i) - 1, 1)

Next

Return tam

End Function

Haøm hoaùn vò p

Function hoanvi_p(ByVal c As String) As String

Dim tam(31) As Char

Dim i As Integer

For i = 0 To 31

tam(i) = c.Substring(hvp(i) - 1, 1)

Next

Return tam

End Function

Haøm hoaùn vò ptru

Function hoanvi_ptru(ByVal c As String) As String

Dim tam(31) As Char

Dim i As Integer

For i = 0 To 31

tam(hvp(i) - 1) = c.Substring(i, 1)

Next

Return tam

End Function

114 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

Haøm hoaùn vò pc1

Function hoanvi_pc1(ByVal k As String) As String

Dim tam(63) As Char

Dim i As Integer

For i = 0 To 63

tam(i) = k.Substring(i, 1)

Next

tam = catbitcuoi(tam)

For i = 0 To 55

tam(i) = k.Substring(Integer.Parse(hvpc1(i) - 1), 1)

Next

Return tam

End Function

Haøm hoaùn vò pc1tru

Function hoanvi_pc1tru(ByVal c As String) As String

Dim tam(63) As Char

Dim i As Integer

For i = 0 To 63

tam(i) = "#"

Next

For i = 0 To 55

tam(hvpc1(i) - 1) = c.Substring(i, 1)

Next

Dim tam1 As String

Return tam

End Function

115 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

Haøm hoaùn vò pc2

Function hoanvi_pc2(ByVal str As String) As String

Dim tam(47) As Char

Dim i As Integer

For i = 0 To 47

tam(i) = str.Substring(Integer.Parse(hvpc2(i) - 1), 1)

Next

Return tam

End Function

Haøm hoaùn vò pc2tru

Function hoanvi_pc2tru(ByVal c As String) As String

Dim tam(55) As Char

Dim i As Integer

For i = 0 To 55

tam(i) = "?"

Next

For i = 0 To 47

tam(hvpc2(i) - 1) = c.Substring(i, 1)

Next

Return tam

End Function

gan va kiem tra du lieu nhap

haøm gaùn döõ lieäu

Function gandulieu() As Boolean

Try

Dim i As Integer = 0

Dim j As Integer

Dim strbanro As String = txtbanro.Text.Replace(Chr(10),

116 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

"")

Dim strbanma As String = txtbanma.Text.Replace(Chr(10), "")

banro = strbanro.Split(Chr(13))

banma = strbanma.Split(Chr(13))

n = banro.Length - 1

ReDim e((n - 1) / 2)

ReDim esao((n - 1) / 2)

ReDim ephay((n - 1) / 2)

ReDim cphay((n - 1) / 2)

If (banro.Length - 1 < n Or banma.Length - 1 < n) Then

MessageBox.Show("thiếu bản rõ hay bản mã")

Return False

Else

Return True

End If

Catch ex As Exception

MessageBox.Show("Dữ liệu nhập không hợp lệ")

Return False

End Try

End Function

Haøm kieåm tra

Function kiemtra() As Boolean

Dim i As Integer

For i = 0 To n

If banro(i) = "" Then

MessageBox.Show("baïn nhaäp chöa ñuû " & (i + 1))

Return False

117 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

End If

If banro(i).Length <> m Then

MessageBox.Show( (i + 1) & m )

Return False

End If

Next

For i = 0 To n

If banma(i) = "" Then

MessageBox.Show("Bạn hãy nhập vào bản mã thứ " & (i + 1))

Return False

End If

If banma(i).Length <> m Then

MessageBox.Show("Bản mã " & (i + 1) & " phải có " & m & " kí tự")

Return False

End If

Next

i = 0

While i <= n

If banro(i).Substring(m / 2, m / 2) <> banro(i + 1).Substring(m / 2, m / 2) Then

MessageBox.Show("Dữ liệu bản rõ " & (i + 1) & " , " & (i + 2) & " nhập không hợp lệ")

Return False

End If

i = i + 2

End While

Return True

118 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

End Function

xu li e_esao_ephay_cphay

xöû lyù e, e sao, e phaåy

Sub xuli_e_esao_ephay()

Dim i As Integer

'e(0)= "000000000111111000001110100000000110100000001100"

'e(1)= "101000001011111111110100000101010000001011110110"

'e(2)= "111011110001010100000110100011110110100101011111"

'esao(0)="101111110000001010101100000001010100000001010010"

'esao(1)="100010100110101001011110101111110010100010101010"

'esao(2) = "000001011110100110100010101111110101011000000100"

For i = 0 To (n - 1) / 2

Dim l3 = banma(i * 2).Substring(0, 32)

Dim l3sao = banma(i * 2 + 1).Substring(0, 32)

e(i) = hoanvi_e(l3)

esao(i) = hoanvi_e(l3sao)

ephay(i) = phay(e(i), esao(i))

Next

End Sub

Function phay(ByVal a As String, ByVal b As String) As String

Dim i As Integer

Dim c As String

For i = 0 To a.Length - 1

119 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

c += (a.Substring(i, 1) Xor b.Substring(i, 1)).ToString

Next

Return c

End Function

Xöû lyù c phaåy

Sub xuli_cphay()

Dim i, j As Integer

For i = 0 To (n - 1) / 2

Dim r3 As String = banma(i * 2).Substring(32, 32)

Dim r3sao As String = banma(i * 2 + 1).Substring(32, 32)

Dim l0 As String = banro(i * 2).Substring(0, 32)

Dim l0sao As String = banro(i * 2 + 1).Substring(0, 32)

Dim r3phay As String = ""

Dim l0phay As String = ""

For j = 0 To 31

r3phay += (r3.Substring(j, 1) Xor r3sao.Substring(j, 1)).ToString

l0phay += (l0.Substring(j, 1) Xor l0sao.Substring(j, 1)).ToString

cphay(i) += (r3phay.Substring(j, 1) Xor l0phay.Substring(j, 1)).ToString

Next

cphay(i) = hoanvi_ptru(cphay(i))

Next

'cphay(0) = "10010110010111010101101101100111"

'cphay(1) = "10011100100111000001111101010110"

'cphay(2) = "11010101011101011101101100101011"

End Sub

cac ham chuyen doi

Function bi_str(ByVal a As String) As String

120 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

Dim i As Integer

Dim b As String

For i = 0 To a.Length - 1

b += binary(asc(a.Substring(i, 1)), hebit)

Next

Return b

End Function

Sub bi_banro_banma()

Dim i As Integer

For i = 0 To n

banro(i) = bi_str(banro(i))

banma(i) = bi_str(banma(i))

Next

End Sub

Function bi_so(ByVal a As Integer) As String

Dim i As Integer

Dim tam(5) As Char

For i = 0 To 5

tam(i) = (a Mod 2).ToString

a \= 2

Next

Array.Reverse(tam)

Return tam

End Function

Function thapphan(ByVal b As String) As Integer

Dim i As Integer

Dim tam As Integer = 0

For i = 0 To b.Length - 1

121 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

If b.Substring(i, 1) = 1 Then

tam += 2 ^ (b.Length - 1 - i)

End If

Next

Return tam

End Function

Function binary(ByVal a As Integer, ByVal n As Integer) As String

Dim i As Integer

Dim tam(n - 1) As Char

For i = 0 To n - 1

tam(i) = (a Mod 2).ToString

a = a \ 2

Next

Array.Reverse(tam)

Return tam

End Function

Haøm taïo taäp test

Function tap_test() As String()

Dim i, j, k As Integer

Dim ee(7) As String

Dim eephay(7) As String

Dim ccphay(7) As String

Dim test(63) As String

For i = 0 To (n - 1) / 2

For j = 0 To 7

ee(j) = e(i).Substring(j * 6, 6)

eephay(j) = ephay(i).Substring(j * 6, 6)

122 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

ccphay(j) = cphay(i).Substring(j * 4, 4)

test = tap_in(ee(j), eephay(j), ccphay(j), s(j))

For k = 0 To 63

If test(k) = 1 Then

jhop(j, k) += 1

End If

Next

Next

Next

End Function

Haøm taïo khoaù voøng 3

Function khoavong3() As String

Dim khoav3 As String

Dim i, j As Integer

Dim count As Integer = 0

Dim vitrimax As Integer

For i = 0 To 7

count = 0

Dim max As Integer = (n + 1) / 2

For j = 0 To 63

If jhop(i, j) = max Then

count += 1

vitrimax = j

End If

Next

If count > 1 Then

lbthongbao.Text = "Nhập thêm bản mã và bản rõ, vì chưa xác định được phần tử max trong jhộp"

123 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

btthamma.Enabled = False

txtbanro.Focus()

n += 2

ReDim banro(n)

ReDim banma(n)

ReDim e((n - 2) / 2)

ReDim esao((n - 2) / 2)

ReDim ephay((n - 2) / 2)

ReDim cphay((n - 2) / 2)

flag = False

Exit Function

End If

khoav3 += binary(vitrimax, 6)

Next

txtkhoav3.Text = khoav3

Return khoav3

End Function

Haøm Xöû lyù khoaù

Function xulikhoa() As String

Dim khoa As String = khoavong3()

If flag = False Then

Exit Function

End If

khoa = hoanvi_pc2tru(khoa)

Dim haitambitdau As String = khoa.Substring(0, 28)

Dim haitambitcuoi As String = khoa.Substring(28, 28)

haitambitdau = dichphai(haitambitdau, 4)

haitambitcuoi = dichphai(haitambitcuoi, 4)

124 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

khoa = haitambitdau + haitambitcuoi

Dim i As Integer

khoa = hoanvi_pc1tru(khoa)

txtkhoa.Text = khoa

Return khoa 'khoa 56 bit

End Function

Haøm taïo chuoãi khoaù

Sub taochuoikhoa(ByVal c As String)

If flag = False Then

Exit Sub

End If

Dim chuoibinary(255) As String

Dim i As Integer

For i = 0 To 255

chuoibinary(i) = binary(i, 8)

chuoikhoa(i) = taotungkhoa(c, chuoibinary(i))

Next

End Sub

Haøm taïo töøng khoaù

Function taotungkhoa(ByVal a As String, ByVal b As String) As String

Dim i As Integer

Dim j As Integer = 0

Dim tam(63) As Char

For i = 0 To 63

tam(i) = a.Substring(i, 1)

If tam(i) = "?" Then

tam(i) = b.Substring(j, 1)

125 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

j += 1

End If

Next

Return tam

End Function

Haøm dòch phaûi

Function dichphai(ByVal s As String, ByVal n As Integer) As String

Return s.Substring(s.Length - n, n) + s.Substring(0, s.Length - n)

End Function

Function tap_in(ByVal e As String, ByVal ephay As String, ByVal cphay As String, ByVal s As DataTable) As String()

Dim tam(63), b, bsao, c, csao, cphaytam As String

Dim i As Integer

For i = 0 To 63

b = bi_so(i)

Dim haibitcuoi As String = b.Substring(0, 1) + b.Substring(5, 1)

Dim bonbitgiua As String = b.Substring(1, 4)

Dim srow = thapphan(haibitcuoi)

Dim scol = thapphan(bonbitgiua)

Dim sij As Integer = s.Rows(srow).Item(scol)

c = binary(sij, 4)

bsao = phay(ephay, b)

haibitcuoi = bsao.Substring(0, 1) + bsao.Substring(5, 1)

bonbitgiua = bsao.Substring(1, 4)

srow = thapphan(haibitcuoi)

scol = thapphan(bonbitgiua)

126 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

sij = s.Rows(srow).Item(scol)

csao = binary(sij, 4)

cphaytam = phay(c, csao)

If cphaytam = cphay Then

tam(thapphan(phay(e, b))) = 1

End If

Next

Return tam

End Function

Moät soá Haøm cho xöû lyù söï kieän

Private Sub btthamma_Click(ByVal sender As System.Object, ByVal ee As System.EventArgs) Handles btthamma.Click

ReDim banro(n)

ReDim banma(n)

ReDim e((n - 1) / 2)

ReDim esao((n - 1) / 2)

ReDim ephay((n - 1) / 2)

ReDim cphay((n - 1) / 2)

flag = True

If gandulieu() = False Then

Exit Sub

End If

If kiemtra() = False Then

Exit Sub

End If

bi_banro_banma()

xuli_e_esao_ephay()

xuli_cphay()

127 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

tap_test()

taochuoikhoa(xulikhoa())

If flag = False Then

Exit Sub

End If

chonkhoadung()

End Sub

Private Sub btthoat_Click(ByVal sender As System.Object, ByVal ee As System.EventArgs) Handles btthoat.Click

Me.Close()

End Sub

Private Sub thammades_Load(ByVal sender As System.Object, ByVal ee As System.EventArgs) Handles MyBase.Load

Dim strbanro As String

strbanro += "748502CD38451097" + Chr(13) + Chr(10)

strbanro += "3874756438451097" + Chr(13) + Chr(10)

strbanro += "486911026ACDFF31" + Chr(13) + Chr(10)

strbanro += "375BD31F6ACDFF31" + Chr(13) + Chr(10)

strbanro += "357418DA013FEC86" + Chr(13) + Chr(10)

strbanro += "12549847013FEC86"

txtbanro.Text = strbanro

Dim strbanma As String

strbanma += "03C70306D8A09F10" + Chr(13) + Chr(10)

strbanma += "78560A0960E6D4CB" + Chr(13) + Chr(10)

strbanma += "45FA285BE5ADC730" + Chr(13) + Chr(10)

strbanma += "134F7915AC253457" + Chr(13) + Chr(10)

strbanma += "D8A31B2F28BBC5CF" + Chr(13) + Chr(10)

128 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

strbanma += "0F317AC2B23CB944"

txtbanma.Text = strbanma

khoitao()

End Sub

'des

Haøm caét bit cuoái

Function catbitcuoi(ByVal k As String) As String 'dua vao 64 bit tra ra 56 bit

Dim i As Integer = 0

Dim j As Integer

Dim tam As String

While i < 63

For j = i To i + 6

tam += k.Substring(j, 1)

Next

i = i + 8

End While

Return tam

End Function

Function ls(ByVal s As String, ByVal n As Integer) As String

Return s.Substring(n, s.Length - n) + s.Substring(0, n)

End Function

Haøm taïo daõy khoaù

Sub taodaykhoa(ByVal khoa As String)

khoa = hoanvi_pc1(khoa)

Dim d(2) As String

Dim c(2) As String

c(0) = khoa.Substring(0, 28)

129 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

c(0) = ls(c(0), 1)

d(0) = khoa.Substring(28, 28)

d(0) = ls(d(0), 1)

daykhoa(0) = hoanvi_pc2(c(0) + d(0))

Dim i As Integer

For i = 1 To 2

If i = 1 Then

c(i) = ls(c(i - 1), 1)

d(i) = ls(d(i - 1), 1)

Else

c(i) = ls(c(i - 1), 2)

d(i) = ls(d(i - 1), 2)

End If

daykhoa(i) = hoanvi_pc2(c(i) + d(i))

Next i

End Sub

Haøm xöû lyù chuoãi nhaäp

Function bi_acsii(ByVal int As Integer) As String

Dim tam(7) As Char

Dim i As Integer

For i = 0 To 7

tam(i) = (int Mod 2).ToString

int \= 2

Next

Array.Reverse(tam)

Return tam

End Function

Haøm maõ hoaù

130 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

Function mahoa(ByVal x As String) As String

Dim i, j As Integer

Dim l(2) As String

Dim r(2) As String

'x = hoanvi_ip(x)

Dim l0 As String = x.Substring(0, 32)

Dim r0 As String = x.Substring(32, 32)

l(0) = r0

For i = 0 To 31

r(0) += (l0.Substring(i, 1) Xor f(r0, daykhoa(0)).Substring(i, 1)).ToString

Next

For i = 1 To 2

l(i) = r(i - 1)

Dim a As String = f(r(i - 1), daykhoa(i))

For j = 0 To 31

r(i) += (l(i - 1).Substring(j, 1) Xor a.Substring(j, 1)).ToString

Next j

Next i

Dim t As String = l(2) + r(2)

Return t

'Return hoanvi_iptru(r(2) + l(2))

End Function

Haøm taïo haøm f

Function f(ByVal r As String, ByVal daykhoa_k As String) As String

Dim i As Integer

131 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

Dim e As String

Dim hv As String = hoanvi_e(r)

For i = 0 To 47

e += (hv.Substring(i, 1) Xor daykhoa_k.Substring(i, 1)).ToString

Next

Dim b(7) As String

Dim c As String

For i = 0 To 7

b(i) = e.Substring(i * 6, 6)

Dim haibitdaucuoi As String = b(i).Substring(0, 1) + b(i).Substring(5, 1)

Dim bonbitgiua As String = b(i).Substring(1, 4)

Dim srow = thapphan(haibitdaucuoi)

Dim scol = thapphan(bonbitgiua)

Dim sij As Integer = s(i).Rows(srow).Item(scol)

c += binary(sij, 4)

Next

Return hoanvi_p(c)

End Function

Haøm ñoåi ra chöõ

'Function doirachu(ByVal y As String) As String

'Dim tam As String = y

'Dim tam1 As String = ""

'Dim so As Integer

'Dim i As Integer

'Dim j As Integer

'While i < tam.Length - 1

132 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

'so = 0

'For j = i To i + 7

'If tam.Substring(j, 1) = 1 Then

'so += 2 ^ (7 - (j - i))

'End If

'Next

'tam1 += Chr(so)

'i = i + 8

'End While

'Return tam1

'End Function

Function doirachu(ByVal y As String) As String

Dim tam As String = y

Dim tam1 As String = ""

Dim so As Integer

Dim i, j As Integer

While i < tam.Length - 1

so = 0

For j = i To i + 3

If tam.Substring(j, 1) = 1 Then

so += 2 ^ (3 - (j - i))

End If

Next

tam1 += chucai(so)

i = i + 4

End While

Return tam1

End Function

133 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

Chöõ caùi

Function chucai(ByVal so As Integer) As Char

Select Case so

Case 0

Return "0"

Case 1

Return "1"

Case 2

Return "2"

Case 3

Return "3"

Case 4

Return "4"

Case 5

Return "5"

Case 6

Return "6"

Case 7

Return "7"

Case 8

Return "8"

Case 9

Return "9"

Case 10

Return "A"

Case 11

Return "B"

Case 12

134 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

Return "C"

Case 13

Return "D"

Case 14

Return "E"

Case 15

Return "F"

End Select

End Function

Haøm chuyeån maõ asc

Function asc(ByVal a As Char)

Select Case a

Case "0"

asc = 0

Case "1"

asc = 1

Case "2"

asc = 2

Case "3"

asc = 3

Case "4"

asc = 4

Case "5"

asc = 5

Case "6"

asc = 6

Case "7"

asc = 7

135 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

Case "8"

asc = 8

Case "9"

asc = 9

Case "A"

asc = 10

Case "B"

asc = 11

Case "C"

asc = 12

Case "D"

asc = 13

Case "E"

asc = 14

Case "F"

asc = 15

End Select

End Function

Haøm choïn khoaù

Sub chonkhoadung()

Dim i As Integer

Dim x As String = banro(0)

'For i = 0 To banro(0).Length - 1

'x += binary(asc(banro(0).Substring(i, 1)), hebit)

'Next

For i = 0 To 255

taodaykhoa(chuoikhoa(i))

Dim banma1 As String = doirachu(mahoa(x))

136 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

If banma1 = doirachu(banma(0)) Then

chuoikhoa(i) = chuoikhoa(i).Replace("#", "0")

txtkhoa.Text = doirachu(chuoikhoa(i))

Exit Sub

End If

Next

MessageBox.Show("khong tim duoc khoa")

End Sub

Private Sub txtbanro_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtbanro.TextChanged

btthamma.Enabled = True

lbthongbao.Text = ""

End Sub

Private Sub txtbanma_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtbanma.TextChanged

btthamma.Enabled = True

lbthongbao.Text = ""

End Sub

End Class

137 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn

Tài liệu tham khảo

1. http://en.wikipedia.org/wiki/MD5.

2. http://www.md5.net/.

3. http://laptrinh.vn/archive/index.php/t-5881.html

4. http://www.scribd.com/doc/57082475/BAO-CAO-MD5 5. Xiaoyun Wang and Hongbo Yu. "How to Break MD5 and Other

Hash Functions". Retrieved 2009-12-21.

6. Tao Xie and Dengguo Feng (30 May 2009). How To Find Weak Input Differences For MD5 Collision Attacks.

138 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Hùng -Trung Quyền- Sơn