CHƯƠNG 2. PHÂN TÍCH THIẾT KẾ HỆ THỐNG
3.1. THUẬT TOÁN DIJKSTRA TÌM ĐƯỜNG ĐI NGẮN NHẤT
3.1.1.
Thuật toán Dijkstra, mang tên của nhà khoa học máy tính người Hà Lan Edsger Dijkstra vào năm 1956 và ấn bản năm 1959, là một thuật toán giải quyết bài toán đường đi ngắn nhất nguồn đơn trong một đồ thị có hướng không, có cạnh mang trọng số âm.
Bài toán tìm đường đi ngắn nhất 3.1.2.
Thuật toán Dijkstra xác định đường đi ngắn nhất giữa 2 đỉnh cho trước, từ đỉnh a đến đỉnh b.
Ở mỗi đỉnh v, thuật toán Dijkstra xác định 3 thông tin: kv, dv và pv.
o kv: mang giá trị Boolean xác định trạng thái đƣợc chọn của đỉnh v.
Ban đầu ta khởi tạo tất cả các đỉnh v chƣa đƣợc chọn, nghĩa là:
o kv:=false, với mọi v thuộc V.
o dv: là chiều dài đường đi mà ta tìm thấy cho đến thời điểm đang xét từ a đến v.
Khởi tạo, dv = ∞, với mọi v thuộc V\{a}, da=0.
o pv là đỉnh trước của đỉnh v trên đường đi ngắn nhất từ a đến b.
Đường đi ngắn nhất từ a đến b có dạng {a,…, pv,…, b}. Khởi tạo, pv = null, với mọi v thuộc V.
Các bước của thuật toán Dijkstra 3.1.3.
Bước 1: Khởi tạo: Đặt kv := false với mọi v thuộc V; kv := vô cùng, với mọi v thuộc V\{a}, da :=0.
Bước 2: Chọn v thuộc V sao cho kv = false và kv = min{d(1)/t thuộc V, k1=false}
Bước 3: Đánh dấu đỉnh v, ku = true;
Bước 4: Nếu v=b thì kết thúc và db là độ dài đường đi ngắn nhất từ a đến b.
Ngược lại nếu v khác b sang bước 5.
SVTH: Trần Thị Hồng Ánh – Lớp 09CNTT2 52 Bước 5: Với mỗi đỉnh u kề với v mà ku = false, kiểm tra
o Nếu du >dv + w(v, u) thì du :=dv +(v, u) o Ghi nhớ đỉnh v: pu :=v. Quay lại Bước 2.
Sơ đồ thuật toán Dijkstra 3.1.4.
Hình 3.1. Sơ đồ thuật toán Dijkstra
3.2. THUẬT TOÁN MÃ HÓA MD5 Khái niệm
3.2.1.
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.
SVTH: Trần Thị Hồng Ánh – Lớp 09CNTT2 53 Sử dụng MD5 để 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.
Ứng dụng của thuật toán 3.2.2.
o 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.
o 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).
Mô tả thuật toán 3.2.3.
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ó sẻ chia hết cho 512. Bộ đệm hoạt động nhƣ sau:
o Trước tiên nó sẻ ch n bit 1 vào cuối thông điệp.
o 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 .
o 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.
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…
SVTH: Trần Thị Hồng Ánh – Lớp 09CNTT2 54 Hình bên dưới 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.2. Chu trình mã hóa bằng thuật toán MD5
Hàm băm MD5 (còn đƣợc gọi là hàm tóm tắt thông điệp - message 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(“matkhau”)= 9e107d9d372bb6826bd81d3542a419d6.
MD5("honganh") = 1055d3e698d289f2af8663725127bd4b.
3.3. THUẬT TOÁN XỬ LÝ CHUỖI Cắt chuỗi
3.3.1.
Thuật toán cắt chuỗi xử lý tại server, server sẽ gửi yêu cầu cho client để lấy chuỗi ở đây chính là tên và mật khẩu đăng nhập của người dùng từ cookie, sau khi nhận chuỗi server sẽ xử lý cắt lấy chuỗi chứa tên người dùng sau đó trả về “name”
chính ta tên người dùng để kiểm tra với cơ sở dữ liệu.
SVTH: Trần Thị Hồng Ánh – Lớp 09CNTT2 55 Mô tả thuật toán:
o Input: Nhận vào một chuỗi từ client.
o Output: Cắt chuỗi và trả về chuỗi cần tìm.
Quá trình xử lý:
function getName(req, res) {
var name, password, namePassword, str;
if ( typeof req.cookies.auth !== "undefined") { namePassword = req.cookies.auth;
str = namePassword.split(".");
name = str[0];
password = str[1];
}
return name;
}
Đọc chuỗi 3.3.2.
Thuật toán đọc chuỗi được xử lý tại client, đọc tên đăng nhập của người dùng từ cookie sau đó tiến hành kiểm tra để xác nhận là người dùng đã đăng nhập hay chưa.
Mô tả thuật toán:
o Input: Nhận vào một chuỗi đọc từ cookie o Output: Đọc và lấy chuỗi cần tìm.
Quá trình xử lý:
function readCookie (name) { var nameCk = name + "=",
splitCk = document.cookie.split(';'), len = splitCk.length;
for (var i=0; i < len; i++) { var c = splitCk[i];
SVTH: Trần Thị Hồng Ánh – Lớp 09CNTT2 56 while(c.charAt(0)=='')c = c.substring(1, c.length);
if (c.indexOf(nameCk) == 0)
return c.substring(nameCk.length, c.length);
}
return null;
}
SVTH: Trần Thị Hồng Ánh – Lớp 09CNTT2 57
CHƯƠNG 4. TRIỂN KHAI VÀ ĐÁNH GIÁ KẾT QUẢ