CHƢƠNG 1: TỔNG QUAN VỀ MÃ HÓA ........................................................................ 1 1.1. Khái niệm về mã hóa dữ liệu: ................................................................................... 1 1.2. Phân loại mã hóa dữ liệu: .......................................................................................... 1 1.2.1. Phân loại theo các phƣơng pháp: ....................................................................... 1 1.2.2. Phân loại theo số lƣợng khóa: ............................................................................ 3 1.3. Tầm quan trọng của mã hóa dữ liệu: ........................................................................ 3 1.4. Các ứng dụng của mã hóa dữ liệu: ............................................................................ 3 CHƢƠNG 2: MÃ HOÁN VỊ ............................................................................................... 5 2.1. Cơ sở lý thuyết: ......................................................................................................... 5 (1) Đảo ngƣợc toàn bộ bản rõ ...................................................................................... 5 (2) Mã hóa theo mẫu hình học ..................................................................................... 5 2.2. Cài đặt chƣơng trình: ................................................................................................ 6 CHƢƠNG 3: HÀM BĂM MD5 .......................................................................................... 8 3.1. Cơ sở lý thuyết: ....................................................................................................... 10 3.1.1. Hàm băm: ......................................................................................................... 10 3.1.2. Hàm băm MD5: ............................................................................................... 12 3.1.2.1. Giới thiệu: ................................................................................................. 12 3.1.2.2. Thuật toán MD5: ....................................................................................... 12 3.2. Cài đặt chƣơng trình: .............................................................................................. 18 CHƢƠNG 4: CÁC DỊCH VỤ PGP ................................................................................... 27 4.1. Tổng quan về PGP .................................................................................................. 27 4.1.1. Giới thiệu chung về PGP ................................................................................. 27 4.1.2. Mục đích sử dụng PGP .................................................................................... 27 4.1.3. Hoạt động của PGP .......................................................................................... 27 4.1.3.1. Xác thực .................................................................................................... 28 4.1.3.2. Mã hóa ...................................................................................................... 28 4.1.3.3. Bảo mật và xác thực .................................................................................. 29 4.1.3.4. Nén ............................................................................................................ 29 4.1.3.5. Tƣơng thích thƣ điện tử ............................................................................ 29 4.1.3.6. Khoá riêng và công khai của PGP ............................................................ 30 4.1.3.7. Các chùm khoá PGP ................................................................................. 31 4.1.3.8. Sinh mẩu tin PGP ...................................................................................... 31 4.1.3.9. Quản lý khoá PGP ..................................................................................... 31 4.2. Cài đặt và thử nghiệm: ............................................................................................ 32 4.2.1. Cài đặt: ............................................................................................................. 32 4.2.2. Sử dụng PGP Desktop Proffessionnal: ............................................................ 35 1
Trang 1TRƯỜNG ĐẠI HỌC HÀNG HẢI VIỆT NAM
Lê Quyết Tiến Đặng Trung Hiếu Nguyễn Hoàng Thùy Trang
Bùi Thị Hương
Hải Phòng, tháng 6 năm 2014
Trang 2CHƯƠNG 1: TỔNG QUAN VỀ MÃ HÓA 1
1.1 Khái niệm về mã hóa dữ liệu: 1
1.2 Phân loại mã hóa dữ liệu: 1
1.2.1 Phân loại theo các phương pháp: 1
1.2.2 Phân loại theo số lượng khóa: 3
1.3 Tầm quan trọng của mã hóa dữ liệu: 3
1.4 Các ứng dụng của mã hóa dữ liệu: 3
CHƯƠNG 2: MÃ HOÁN VỊ 5
2.1 Cơ sở lý thuyết: 5
(1) Đảo ngược toàn bộ bản rõ 5
(2) Mã hóa theo mẫu hình học 5
2.2 Cài đặt chương trình: 6
CHƯƠNG 3: HÀM BĂM MD5 8
3.1 Cơ sở lý thuyết: 10
3.1.1 Hàm băm: 10
3.1.2 Hàm băm MD5: 12
3.1.2.1 Giới thiệu: 12
3.1.2.2 Thuật toán MD5: 12
3.2 Cài đặt chương trình: 18
CHƯƠNG 4: CÁC DỊCH VỤ PGP 27
4.1 Tổng quan về PGP 27
4.1.1 Giới thiệu chung về PGP 27
4.1.2 Mục đích sử dụng PGP 27
4.1.3 Hoạt động của PGP 27
4.1.3.1 Xác thực 28
4.1.3.2 Mã hóa 28
4.1.3.3 Bảo mật và xác thực 29
4.1.3.4 Nén 29
4.1.3.5 Tương thích thư điện tử 29
4.1.3.6 Khoá riêng và công khai của PGP 30
4.1.3.7 Các chùm khoá PGP 31
4.1.3.8 Sinh mẩu tin PGP 31
4.1.3.9 Quản lý khoá PGP 31
4.2 Cài đặt và thử nghiệm: 32
4.2.1 Cài đặt: 32
4.2.2 Sử dụng PGP Desktop Proffessionnal: 35
Trang 3CHƯƠNG 1: TỔNG QUAN VỀ MÃ HÓA 1.1 Khái niệm về mã hóa dữ liệu:
Mã hóa đã được con người sử dụng từ lâu đời Các hình thức mã hóa sơ khai đã được tìm thấy từ khoảng 4000 năm trước trong nền văn minh Ai Cập cổ đại Trải qua hàng nghìn năm lịch sử, mã hóa đã được sử dụng rộng rãi ở khắp nơi trên thế giới từ Đông sang Tây để giữ bí mật cho việc giao lưu thông tin trong nhiều lĩnh vực hoạt động giữa con người và các quốc gia, đặc biệt trong các lĩnh vực quân sự, chính trị, ngoại giao
Vậy Encrypt (Encipher, Encryption): mã hóa – đó là quá trình biến đổi thông tin từ dạng
ban đầu – có thể hiểu được thành dạng không thể hiểu được, với mục đích giữ bí mật thông tin đó
Hệ mật mã: Hệ mật mã được định nghĩa là một bộ năm (P, C, K, E, D), trong đó:
Hình 1.1 Quá trình mã hóa và giải mã
1.2 Phân loại mã hóa dữ liệu:
1.2.1 Phân loại theo các phương pháp:
Mã hóa 2 chiều
(1) Mã hóa đối xứng (Symetric cryptography):
- Mã hóa đối xứng còn có một số tên gọi khác như Secret Key Cryptography hay Private Key Cryptography, sử dụng một khóa cho cả 2 quá trình mã hóa và giải mã Trong hệ thống mã hóa đối xứng, trước khi truyền dữ liệu, 2 bên gửi
Trang 4và nhận phải thỏa thuận về khóa dùng chung cho quá trình mã hóa và giải mã Sau đó, bên gửi sẽ mã hóa bản rõ (PlainText) bằng cách sử dụng khóa bí mật này và gửi cho bên nhận Bên nhận sau khi nhận được thông điệp đã mã hóa sẽ dùng chính khóa bí mật mà 2 bên đã thỏa thuận để giải mã và lấy lại bản rõ (PlainText)
Hình 1.2 Mã hóa đối xứng
- Mã hóa đối xứng có thể chia làm 2 loại:
Loại tác động theo từng nhóm bits– Mã khối (Block cipher): từng khối dữ liệu trong văn bản ban đầu được thay thế bằng một khối dữ liệu khác có cùng độ dài Đối với các thuật toán ngày nay thì kích thước chung của một khối là 64 bits
Loại tác động lên bản rõ theo từng bit một – Mã dòng (Stream cipher): dữ liệu của văn bản được mã hóa từng bit một Các thuật toán mã hóa theo phương pháp này có tốc độ nhanh hơn các thuật toán theo mã hóa khối, và
nó thường được áp dụng trong trường hợp lượng dữ liệu mã hóa chưa biết trước
- Một số loại mã hóa đối xứng: DES, 3DES, RC4, AES,…
(2) Mã hóa bất đối xứng (Asysmetric Cryptography):
- Hay còn được gọi với một cái tên khác là mã hóa công khai (Public Key Cryptograpy), nó được thiết kế sao khóa được sử dụng trong quá trình mã hóa khác biệt với kháo sử dụng trong quá trình giải mã Một người có thể dùng khóa này để mã hóa dữ liệu nhưng chỉ duy nhất người có khóa giải mã tương ứng mới có thể đọc được dữ liệu mà thôi Khóa để mã hóa là Public Key, khóa
để giải mã là Private Key
Trang 5Hình 1.3 Mã hóa bất đối xứng
- Một ví dụ điển hình của mã hóa bất đối xứng là mã hóa RSA
Mã hóa 1 chiều: là loại mã hóa mà chỉ có thể mã hóa từ một thông điệp thành một
thông điệp rút gọn mà không thể giải mã trở lại thành thông điệp ban đầu Ví dụ
về mã hóa một chiều có thể kể đến SHA1, MD5,…
1.2.2 Phân loại theo số lượng khóa:
Mã hóa khóa bí mật (Private Key Cryptography): là dạng mã hóa mà khi người
dùng trao đổi thông tin với nhau không cần trao đổi khóa bí mật, nhưng khi nhận được thông điệp gửi đến thì không thể xác nhận chính xác được người gửi cũng như nội dung có bị thay đổi hay không
Mã hóa khóa công khai (Public Key Cryptography): là dạng mã hóa cho phép
người trao sử dụng trao đổi các thông tin mật mã mà không cần phải trao đổi các khóa chung bí mật trước đó Điều này được thực hiện bằng các sử dụng một cặp khóa có quan hệ toán học với nhau là khóa công khai và khóa bí mật
1.3 Tầm quan trọng của mã hóa dữ liệu:
Thuật ngữ Cryptography đề cập tới ngành khoa học nghiên cứu về mã hóa và giải
mã thông tin Cụ thể hơn là nghiên cứu các cách thức chuyển đổi thông tin từ dạng rõ sang dạng mờ và ngược lại Đây là một phương pháp rất tốt trong việc chống lại những truy cập bất hợp pháp tới dữ liệu được truyền đi trên mạng, áp dụng mã hóa sẽ khiến thông tin được truyền đi dưới dạng mờ và không thể đọc bởi bất kỳ ai cố tình muốn lấy thông tin đó Mã hóa được áp dụng như một biện pháp nhằm giúp chúng ta bảo vệ chính mình cũng như những thông tin chúng ta muốn truyền đi Bên cạnh đó mã hóa còn có những ứng dụng khác nhau như bảo đảm tính toàn vẹn của dữ liệu, tính bí mật, tính xác thực và tính không thể chối bỏ
1.4 Các ứng dụng của mã hóa dữ liệu:
Một số ứng dụng của mã hóa dữ liệu phổ biến:
(1) Securing Mail (Bảo mật email)
(2) Authentication System (Xác thực hệ thống)
(3) Secure E-commere (An toàn trong thương mại điện tử)
(4) Virtual Private Network (Bảo mật mạng riêng ảo)
Trang 6(5) Wireless Encryption (Mã hóa mạng không dây)
(6) Là nền tảng của chữ ký điện tử, các hệ thống PKI (hạ tầng khóa công khai) (7) …
Trang 7CHƯƠNG 2: MÃ HOÁN VỊ 2.1 Cơ sở lý thuyết:
Hệ mã hoán vị hay còn gọi là hệ mã hóa đổi chỗ Là hệ mã hóa mà các ký tự của bản rõ vẫn giữ nguyên, nhưng thứ tự của chúng được sắp xếp lại Không giống như mã thay thế, ở đây không có phép toán đại số nào cần thực hiện khi mã hóa và giải mã
Phương pháp này có các kỹ thuật mã hóa sau:
(2) Mã hóa theo mẫu hình học
Bản gốc được sắp xếp lại theo một mẫu hình học nào đó, thường là một mảng hoặc ma trận hai chiều
Ví dụ: Bản rõ: “KHOA CONG NGHE THONG TIN” được viết theo ma trận 4x5 như sau:
Đầu tiên biểu diễn các ký tự trong bản rõ thành dạng hình chữ nhật theo cột, sau
đó các cột được sắp xếp lại và các chữ cái được lấy ra theo hàng ngang
Ví dụ: Bản rõ là “KHOA CONG NGHE THONG TIN” được viết dưới dạng ma trận 4x5 theo cột như sau:
Trang 8Vì có 5 cột nên ta có thể sắp xếp lại theo 5!=120 cách khác nhau Để tăng độ an toàn có thể chọn 1 trong các cách sắp xếp lại đó
Nếu ta chuyển vị trí các cột theo thứ tự 3, 5, 2, 4, 1 Rồi lấy các ký tự ra theo hàng ngang
ta sẽ được bản mã là:
“NGCTKGTOHHHINÔENGNA”
Lưu ý: các ký tự trống được bỏ đi
(4) Hoán vị các ký tự của bản rõ theo chu kỳ cố định
Cho m là một số nguyên dương xác định nào đó Cho P = C = (Z26)m và cho K gồm tất cả các hoán vị của {1,…,m} Đối với một khóa π (tức là một hoán vị) ta xác định:
Nếu kích thước bản rõ lớn hơn nhiều so với d thì ta sẽ phải chia bản rõ thành các khối d
ký tự và tiến hành mã hóa theo từng khối Ví dụ:
Bản rõ “KHOA CONG NGHE THONG TIN” giả sử d=6, và f hoán vị dãy i = 12345 thành f(i) = 35142
Ta thu được bản mã “OCKAHGGONNTOHHETNIG”
2.2 Cài đặt chương trình:
2.2.1 Mã nguồn cài đặt:
Trang 9private Dictionary<int, int> _BangHoanVi;
private Dictionary<int, int> _BangGiaiHoanVi;
private int _KichThuocHoanVi
_BangHoanVi = new Dictionary<int, int>();
_BangGiaiHoanVi = new Dictionary<int,int>();
int num = int.Parse(sr.ReadLine());
for (int i = 0; i < num; i++)
Trang 10catch (Exception ex)
char[] banMa = vBanRo.ToArray<char>();
int len = vBanRo.Length;
for (int i = 0; i < len; ++i)
{
int thuTu = i % _KichThuocHoanVi;
int dich = i - thuTu;
banMa[dich + _BangHoanVi[thuTu]] = vBanRo[dich + thuTu];
char[] banRo = vBanMa.ToArray<char>();
int len = vBanMa.Length;
for (int i = 0; i < len; ++i)
{
int thuTu = i % _KichThuocHoanVi;
int dich = i - thuTu;
banRo[dich + thuTu] = vBanMa[dich + _BangHoanVi[thuTu]];
Trang 112.2.2 Giao diện demo:
Hình 2.1 Giao diện demo thuật toán mã hoán vị
Trang 12CHƯƠNG 3: HÀM BĂM MD5 3.1 Cơ sở lý thuyết:
3.1.1 Hàm băm:
Hàm băm là các thuật toán không sử dụng khóa để mã hóa (ở đây ta dùng thuật ngữ “băm” thay cho “mã hóa”), nó có nhiệm vụ “lọc” (băm) thông điệp được đưa vào
theo một thuật toán h một chiều nào đó, rồi đưa ra một bản băm – văn bản đại diện – có
kích thước cố định Do đó người nhận không biết được nội dung hay độ dài ban đầu của thông điệp đã được băm bằng hàm băm
Giá trị của hàm băm là duy nhất, và không thể suy ngược lại được nội dung
thông điệp từ giá trị băm này
Đặc trưng
Hàm băm h là hàm băm một chiều (one-way hash) với các đặc tính sau:
h(x’) h(x) Cho dù chỉ là một sự thay đổi nhỏ hay chỉ là xóa đi 1 bit dữ liệu
của thông điệp thì giá trị băm cũng vẫn thay đổi Điều này có nghĩa là: hai thông điệp hoàn toàn khác nhau thì giá trị hàm băm cũng khác nhau
Nội dung của thông điệp gốc không thể bị suy ra từ giá trị hàm băm Nghĩa là: với
thông điệp x thì dễ dàng tính được z = h(x), nhưng lại không thể (thực chất là khó) suy ngược lại được x nếu chỉ biết giá trị hàm băm h
Tính chất
Tính chất 1: Hàm băm h là không va chạm yếu
Xét một kiểu tấn công như sau:
Đáng lẽ: thông tin phải được truyền đúng từ A đến B
Hình 3.1 Cách đi đúng của thông tin
Trang 13Nhưng: trên đường truyền, thông tin bị lấy trộm và bị thay đổi
Hình 3.2 Thông tin bị lấy trộm và bị thay đổi trên đường truyền
Người A gửi cho B (x, y) với y = sigK(h(x)) Nhưng trên đường truyền, tin bị lấy trộm Tên trộm, bằng cách nào đó tìm được một bản thông điệp x’ có h(x’) = h(x) mà x’
x Sau đó, hắn đưa x’ thay thế x rồi truyền tiếp cho người B Người B nhận được và
vẫn xác thực được thông tin đúng đắn
Do đó, để tránh kiểu tấn công như trên, hàm h phải thỏa mãn tính không va chạm yếu: Hàm băm h là không va chạm yếu nếu khi cho trước một bức điện x, không thể tiến hành về mặt tính toán để tìm ra một bức điện x’ x mà h(x’) = h(x)
Tính chất 2: Hàm băm h là không va chạm mạnh:
Xét một kiểu tấn công như sau: Đầu tiên, tên giả mạo tìm ra được hai bức thông
điệp x’ và x (x’ x) mà có h(x’) = h(x) (ta coi bức thông điệp x là hợp lệ, còn x’ là giả mạo) Tiếp theo, hắn đưa cho ông A và thuyết phục ông này kí vào bản tóm lược h(x) để nhận được y Khi đó (x’, y) là bức điện giả mạo nhưng hợp lệ
Để tránh kiểu tấn công này, hàm h phải thỏa mãn tính không va chạm mạnh: Hàm băm h là không va chạm mạnh nếu không có khả năng tính toán để tìm ra hai bức thông điệp x và x’mà x x’ và h(x) = h(x’)
Tính chất 3: Hàm băm h là hàm một chiều:
Xét một kiểu tấn công như sau: Việc giả mạo các chữ ký trên bản tóm lược z
thường xảy ta với các sơ đồ chữ ký số Giả sử tên giả mạo tính chữ ký trên bản tóm lược
z, sau đó hắn tìm một bản thông điệp x’ được tính ngược từ bản đại diện z, z = h(x’) Tên
trộm thay thế bản thông điệp x hợp lệ bằng bản thông điệp x’ giả mạo, nhưng lại có z =
h(x’) Và hắn ký số trên bản đại diện cho x’ bằng đúng chữ ký hợp lệ Nếu làm được như
vậy thì (x’, y) là bức điện giả mạo nhưng hợp lệ
Để tránh được kiểu tấn công này, h cần thỏa mãn tính chất một chiều: Hàm băm h
là một chiều nếu khi cho trước một bản tóm lược thông báo z thì không thể thực hiện về mặt tính toán để tìm ra thông điệp ban đầu x sao cho h(x) = z
Ng-êi göi
A
Ng-êi nhËn B
Tªn nghe lÐn, lÊy trém tin
Trang 14 Các thuật toán băm
Các hàm băm dòng MD: MD2, MD4, MD5 được Rivest đưa ra thu được kết quả đầu ra với độ dài là 128 bit Hàm băm MD4 đưa ra vào năm 1990 Một năm sau phiên bản mạnh MD5 cũng được đưa ra Chuẩn hàm băm an toàn: SHA, phức tạp hơn nhiều cũng dựa trên các phương pháp tương tự, được công bố trong Hồ sơ Liên bang năm 1992
và được chấp nhận làm tiêu chuẩn vào năm 1993 do Viện Tiêu Chuẩn và Công Nghệ Quốc Gia (NIST), kết quả đầu ra có độ dài 160 bit
3.1.2 Hàm băm MD5:
3.1.2.1 Giới thiệu:
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
MD5 có 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
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)
3.1.2.2 Thuật toán MD5:
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 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ó chia hết cho 512
Bộ đệm hoạt động như sau:
(1) Trước tiên nó sẽ chèn bit 1 vào cuối thông điệp
(2) 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
(3) 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 Trong trường hợp độ dài của thông điệp lớn hơn 2^64 thì chỉ có 64 bit thấp được sử dụng
Trang 15Thuậ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 word 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 Khối dữ liệu đầu vào của thuật toán có độ dài là bội số của 512 sẽ được chia thành L khối 512 bit 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…Đây là hình mô tả một quá trình trong một vòng
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
Hình 3.3 uá trình trong một v ng
Thuật toán:
Input : Thông điệp có độ dài tùy ý
Ouput : Bản băm, đại diện cho thông điệp gốc, độ dài cố định 128 bit
Mô tả thuật toán:
Giả sử đầu vào là một xâu a có độ dài b bit (b có thể bằng 0)
Bước 1: Khởi tạo các thanh ghi
Có 4 thanh ghi được sử dụng để tính toán nhằm đưa ra các đoạn mã: A, B, C, D Bản tóm lược của thông điệp được xây dựng như sự kết nối của các thanh ghi Mỗi thanh ghi có độ dài 32 bit Các thanh ghi này được khởi tạo giá trị hecxa
Trang 16word B := EF CD AB 89 word C := 98 BA DC FE word D := 10 32 54 76
Bước 2:
Xử lý thông điệp a trong 16 khối word, có nghĩa là xử lý cùng một lúc 16 word =
512 bit (chia mảng M thành các khối 512 bit, đƣa từng khối 512 bit đó vào mảng T[j]) Mỗi lần xử lý một khối 512 bit Lặp lại N/16 lần
Gán giá trị cho bốn biến AA, BB, CC, DD lần lƣợt bằng giá trị của 4 thanh ghi A,
B, C, D
Bước 3:Thực hiện bốn vòng băm với các khối cần xử lý
Một số phép toán logic đƣợc sử dụng trong bốn vòng này
X Y là phép toán AND theo bit giữa X và Y
X Y là phép toán OR theo bit giữa X và Y
X Y là phép toán XOR theo bit giữa X và Y
Trang 17Hình 3.4 uá trình tạo bản băm của MD5
Các vòng 1, 2, 3 và 4 dùng tương ứng ba hàm F, G, H và I Mỗi hàm này là một hàm boolean tính theo bit Chúng được xác định như sau:
Trang 18Hình 3.5 Lược đồ thuật toán MD5
MD5 sử dụng thêm một mảng S[1 … 64] được xây dựng từ hàm sin Với S[i], giá
trị của phần tử thứ i trong mảng S, tương đương với phần nguyên của 4294967296 abs(sin(i)), với i tính theo radian
Trang 19Ta có mảng S[1 … 64] nhƣ sau (tất cả đều để ở hệ cơ số 16):
Trang 20Các phép toán được thực hiện trong bốn vòng tạo ra các giá trị mới trong bốn
thanh ghi Cuối cùng, bốn thanh ghi được cập nhật ở 3.5 bằng cách cộng ngược các giá
trị lưu trước đó ở 2.3 Phép cộng này được xác định là cộng các số nguyên dương, được rút gọn theo modulo 232
Kết quả ra là đoạn mã có độ dài 128 bit, được thu gọn từ thông điệp a có độ dài b
bit Đoạn mã này thu được từ 4 thanh ghi A, B, C, D: bắt đầu từ byte thấp của thanh ghi
A cho đến byte cao của thanh ghi D
3.2 Cài đặt chương trình:
3.2.1 Mã nguồn chương trình:
Trang 21Mã nguồn file ThuatToanMahoa
int len = _K.Length;
for (int i = 0; i < len; ++i)
_K[i]= (uint)Math.Floor(Math.Abs(Math.Sin(i + 1)) * Math.Pow(2,32)); }
private byte[] DemChuoiDauVao(string vBanRo)
{
//Bước 1: Chuyển bản rõ thành dãy byte
byte[] bytes = TienIch.ChuyenStringSangBytes(vBanRo);
//Bước 2: Chèn bit 1 vào cuối dãy
bytes = TienIch.NoiBytes(bytes, new byte[] { 128 });
//Bước 3: Tạo ra dãy bit 0 để nối vào sao cho chiều dài dãy chia 512 dư 448 byte[] byte0s = new byte[(120 - (bytes.Length % 64))%64];
for (int i = 0; i < byte0s.Length; ++i)
byte0s[i] = 0;
//Bước 4: Nối dãy bit 0 vào sau chuỗi
bytes = TienIch.NoiBytes(bytes, byte0s);
Trang 22Int64 len = (TienIch.ChuyenStringSangBytes(vBanRo).Length * 8) %
((Int64)Math.Pow(2,64));
//Bước 6: Chuyển độ dài này về dạng dãy byte
byte[] byteLenghts = BitConverter.GetBytes(len);
//Bước 7: Nối dãy byte này vào dãy byte đầu
bytes = TienIch.NoiBytes(bytes, byteLenghts);
//throw new Exception(TienIch.ChuyenBytesSangString(bytes));
byte[] bytes = DemChuoiDauVao(vBanRo);
List<byte[]> khois = TienIch.ChiaNho(bytes,64);
int lenKhois = khois.Count;
for (uint i = 0; i < lenKhois; i++)
{
List<byte[]> tus = TienIch.ChiaNho(khois[(int)i], 4);
int lenTus = tus.Count;
Trang 23bytes = TienIch.NoiBytes(bytes, BitConverter.GetBytes(_H2));
bytes = TienIch.NoiBytes(bytes, BitConverter.GetBytes(_H3));
return TienIch.ChuyenBytesSangString(bytes);
}
}
}