Chương 1. Giới thiệu đề tài: các công trình liên quan, các phần cần thực hiện và giới hạn công việc. Cơ sở lý thuyết: trình bày về các giao thức của Yahoo cũng như các ngôn ngữ lập trình liên quan và các thuật toán mã hóa. Phân tích và thiết kế hệ thống: Đề xuất giải thuật cụ thể để phân tích đánh giá, và xây dựng ứng dụng.
Giới thiệu chương trình Chương 5. Kết luận: là chương cuối cùng nhằm đánh giá kết quả đạt được, ưu nhược điểm cùng với hướng mở rộng trong tương lai. Nguyễn Hữu Bình – Lê Thị Bé Trang 14 Xây dựng chương trình Chat Yahoo Hỗ trợ hiệu quả làm việc nhóm và bảo mật thông tin CHƯƠNG 2: CƠ SỞ LÝ THUYẾT 2. Yahoo! Messenger là gì? Yahoo! Messenger là công cụ bạn có thể sử dụng để dễ dàng liên lạc với bạn bè và gia đình ở khắp nơi trên thế giới.
Bạn có thể trò chuyện trong thời gian thực, cập nhật trạng thái và xem thông tin cập nhật của bạn bè mình, gửi tin SMS và chia sẻ ảnh và tập tin ngay lập tức. Tìm hiểu về giao thức Yahoo 2. Cấu trúc gói tin Tất cả truyền thông Yahoo đều sử dụng giao thức TCP thông qua truyền thông IP và dữ liệu Yahoo nằm trong trường dữ liệu của gói TCP. Yahoo mở rộng giao thức TCP/IP bằng việc sử dụng header được tạo ra bởi định dạng header ở lớp ứng dụng của nó.
Một header của Yahoo dài 20 bytes được nhận ra bởi 4 byte đầu tiên là “YMSG”. Header của Yahoo cũng bao gồm thông tin phiên bản của YMSG, độ dài thông báo, kiểu dịch vụ, trạng thái và ID của phiên làm việc (session ID). Hình bên dưới biểu diễn một header của Yahoo và dữ liệu trong đó: Hình 2.1: Header chung của Yahoo! Messenger Phần dữ liệu (Data) của gói Yahoo cũng tuân theo cấu trúc riêng. Ngay sau Session ID, trường dữ liệu có dạng FIELD ID, FIELD SEPARATOR, FIELD DATA, FIELD SEPARATOR,.
Trường ID được biểu diễn bằng một số nguyên ASCII có thể bao gồm một vài ký tự. Ngăn cách các trường là một dãy số hexa có giá trị là C0 80. Hình sau biểu diễn một cấu trúc trường dữ liệu của gói Yahoo: Nguyễn Hữu Bình – Lê Thị Bé Trang 15 Xây dựng chương trình Chat Yahoo Hỗ trợ hiệu quả làm việc nhóm và bảo mật thông tin Hình 2.2: Cấu trúc trường dữ liệu Yahoo Như vậy, một gói Yahoo! sẽ có dạng như trong hình bên dưới. Ở dòng đầu của hình vẽ bao gồm kiểu dịch vụ và phía trên bên phải cho thấy phương hướng truyền thông.
Một danh mục các trường ID, kiểu dịch vụ và trạng thái có thể tìm thấy trong phụ lục A và B.3: Ví dụ về một gói Yahoo 2. Cơ chế đăng nhập Để có thể sử dụng mạng Yahoo, client phải đăng nhập với tên người dùng và mật khẩu. Thứ tự của các bước đăng nhập được trình bày trong hình dưới. Không phải tất cả các bước đều là cần thiết để đăng nhập vào mạng Yahoo! và các bước không bắt buộc được đánh dấu “*”.
Nguyễn Hữu Bình – Lê Thị Bé Trang 16 Xây dựng chương trình Chat Yahoo Hỗ trợ hiệu quả làm việc nhóm và bảo mật thông tin Hình 2.1: Chuỗi các bước đăng nhập Bước đầu tiên để đăng nhập là gửi một gói xác nhận, Yahoo_Verify, tới máy chủ Yahoo! để kiểm tra nếu tồn tại một đường mạng dùng được. Cấu trúc gói này được trình bày trong các hình sau.2: Cấu trúc gói xác nhận được gửi tới Yahoo Server Hình 2.3: Chi tiết dữ liệu gửi từ Client tới Server Hình 2.4: Cấu trúc gói xác nhận được gửi trả lại từ Yahoo Server Nguyễn Hữu Bình – Lê Thị Bé Trang 17 Xây dựng chương trình Chat Yahoo Hỗ trợ hiệu quả làm việc nhóm và bảo mật thông tin Hình 2.5: Chi tiết dữ liệu được Server gửi trả Client Khi truyền thông được xác nhận, sẽ tiến hành trao quyền bằng cách gửi đi gói Yahoo_Auth. Gói được gửi tới server bao gồm tên người dùng và yêu cầu dịch vụ. Server trả lời với xâu mời truyền thông (challenge) và session ID.
Session ID được nhận từ server và sẽ được kèm theo với các gói tin cho đến khi truyền thông kết thúc. Giai đoạn xác lập quyền được thể hiện trong hai hình bên dưới.6: Cấu trúc gói xác lập quyền được gửi tới Server Trong gói tin này, trường dữ liệu sẽ chứa xâu ký tự là tên người dùng, độ dài của trường dữ liệu cũng phụ thuộc vào đó.7: Cấu trúc gói xác lập quyền nhận được từ Server Khi client nhận được lời mời truyền thông, client sẽ thêm giá trị của xâu đó vào mật khẩu và tính toán mảng băm MD. Kết quả mảng băm sẽ Nguyễn Hữu Bình – Lê Thị Bé Trang 18 Xây dựng chương trình Chat Yahoo Hỗ trợ hiệu quả làm việc nhóm và bảo mật thông tin được chia vào 2 trường dữ liệu, 6 và 96, và được gửi tới server. Cùng với mật khẩu hash, những dữ liệu về hệ thống khác như client version cũng được gửi qua gói Authorization Response.
Cấu trúc gói AuthResp được trình bày trong sau.8: Client gửi trả sự ủy quyền tới Server Sau khi mật khẩu băm hợp lệ được thừa nhận từ server, người dùng sẽ được xem xét để đăng nhập và không cần thông tin khác từ client nữa. Trong hầu hết các trường hợp, sau khi gói AuthResp được gửi từ client, server gửi buddy list (danh sách bạn chat) cho người dùng. Buddy list được chứa trong gói Yahoo_List. Nguyễn Hữu Bình – Lê Thị Bé Trang 19 Xây dựng chương trình Chat Yahoo Hỗ trợ hiệu quả làm việc nhóm và bảo mật thông tin Hình 2.9: Yahoo Buddy List nhận từ Server.
Sau khi nhận được buddy list từ server, các gói khác cũng được gửi tiếp theo. Những gói này là Yahoo_Ping chứa thông tin về những người đang online. Giống thông tin về Yahoo_List, Yahoo_Ping cũng qua nhiều gói, headers, hoặc cả hai. Thông tin về mỗi buddy được chứa đựng trong cấu trúc gồm có username, tin nhắn gửi đi và các thông tin về hệ thống khác.
Một header thêm vào có thể cũng được gửi, cho biết những thông tin về các email chưa được đọc thông qua Yahoo! mail server. Vào cuối quá trình đăng nhập, có thể server sẽ gửi tới client vài thông báo không cần thiết. Ví dụ: về kiểu skin của client, cập nhật LaunchCast Radio, đoạn trích, thời tiết và Yahoo! Insider. Chương trình Yahoo! Update cũng có thể chạy song song với thao tác đăng nhập để kiểm tra việc cập nhật của chương trình.
Nguyễn Hữu Bình – Lê Thị Bé Trang 20 Xây dựng chương trình Chat Yahoo Hỗ trợ hiệu quả làm việc nhóm và bảo mật thông tin 2. Lập trình với Java 2. Java Java là ngôn ngữ lập trình dạng lập trình hướng đối tượng (OOP), được thiết kế độc lập với hệ điều hành, cho phép người lập trình viết chương trình một lần và có thể sử dụng tại bất kỳ đâu. Khác với phần lớn ngôn ngữ lập trình thông thường, thay vì biên dịch mã nguồn thành mã máy hoặc thông dịch mã nguồn khi chạy, Java được thiết kế để biên dịch mã nguồn thành bytecode, bytecode sau đó sẽ được môi trường thực thi (runtime environment) chạy.
Ngôn ngữ Java có cú pháp rất giống với ngôn ngữ C/C++ (là một ngôn ngữ rất mạnh được dùng phổ biến hiện nay), tuy nhiên nó đã được thay đổi khá nhiều để đáp ứng khả năng độc lập với hệ điều hành. Nền tảng của ngôn ngữ Java là các class. Các class đóng vai trò như những đối tượng, người lập trình khi xây dựng ứng dụng sẽ sử dụng một số class chuẩn của hệ thống, đồng thời có thể tự mình xây dựng class khác đáp ứng yêu cầu công việc. Java là ngôn ngữ dễ học, nó lược bớt những lệnh thừa và rườm rà của C/C++ để người lập trình chú trọng vào việc viết chương trình, do đó việc viết một chương trình bằng Java dễ hơn, đơn giản hơn, đỡ tốn công sửa lỗi hơn.
Dùng bộ thư viện chuẩn KFC, nhiều đoạn code Java chỉ mất vài dòng trong khi C phải mất cả trang giấy. Java Swing Swing là một tập các thành phần giao diện đồ hoạ GUI (Graphical User Interface ), có thể tuỳ biến "dáng vẻ và cảm xúc"(tức là "look and feel"- LAF). Thực chất, Swing chỉ là một bộ phần của JFC (Java Foundation Classes), JFC là một tập lớn gồm các thư viện được thiết kế giúp lập trình viên lập trình các sản phẩm lớn. Swing API chỉ là một trong năm thư viện tạo nên JFC gồm: AWT (Abstract Windowing Toolkit), Swing, accessibility, 2D API, Drag and Drop.
Khi chưa có Swing, lập trình viên dùng các thành phần giao diện đồ hoạ AWT. Sau này, Swing được phát triển nhưng không hoàn toàn thay thế AWT, thực chất Swing xây dựng trên nền AWT qua kế thừa Nguyễn Hữu Bình – Lê Thị Bé Trang 21 Xây dựng chương trình Chat Yahoo Hỗ trợ hiệu quả làm việc nhóm và bảo mật thông tin Thời gian đầu của Java, các lập trìnhh viên quen thuộc với các Applet dùng AWT, nhưng khi Java cần phải mở rộng thành một ngôn ngữ lập trình các ứng dụng lớn thì AWT tỏ ra nghèo nàn và không thích hợp. Người ta đã phải thiết kế lại mô hình xử lý sự kiện của AWT từ kiểu "chain" sang kiểu "event subcriber"(kiểu mẫu thiết kế Observer), về mẫu thiết kế Chain và Observer các bạn có thể tìm ở trên Wikipedia. Nhưng như thế là chưa đủ,và các thành phần Swing đã được đưa vào JFC.
Hình dạng thể hiện của các thành phần giao diện đồ hoạ của Swing hoàn toàn có thể tuỳ biến bởi người lập trình và hơn nữa độc lập hệ nền. Bạn import Swing bằng cách dùng: import javax. Java Runtime Enviroment (JRE) Java Runtime Environment là phần mềm cho phép bạn chạy các ứng dụng được viết bằng ngôn ngữ lập trình Java, cung cấp các thư viện, Java Virtual Machine, và các thành phần khác để chạy các applet và các ứng dụng viết bằng ngôn ngữ lập trình Java. Ngoài ra, hai công nghệ triển khai là một phần của Java Runtime Environment: Java Plug-in, cho phép các applet chạy trong các trình duyệt phổ biến và Java Web Start, triển khai các ứng dụng độc lập qua mạng.
Java Runtime Environment còn được gọi là Java Runtime, là một phần của Java Development Kit (JDK), một tập hợp các công cụ lập trình cho phát triển các ứng dụng Java. Java Runtime Environment môi trường cung cấp các yêu cầu tối thiểu để thực hiện một ứng dụng Java, nó bao gồm các máy ảo Java (JVM), các lớp học cốt lõi, và các tập tin hỗ trợ. Java Runtime Environment chỉ một lần cài đặt, bạn có thể chạy mọi ứng dụng trên nền Java có hỗ trợ cho PC. Nó sẽ cho phép bạn thực hiện các yếu tố được gọi là applet.