Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 235 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
235
Dung lượng
1,67 MB
Nội dung
Chương LẬP TRÌNH HƯỚNG ðỐI TƯỢNG Mục tiêu Kết thúc chương, học viên có thể: ðịnh nghĩa Lập trình hướng ðối tượng (Object-oriented Programming) Nhận thức Trừu tượng hóa Dữ liệu (Data Abstraction) ðịnh nghĩa Lớp (Class) ðịnh nghĩa ðối tượng (Object) Nhận thức ñược khác biệt Lớp ðối tượng Nhận thức ñược cần thiết ñối với phương thức Thiết lập (Construction) Hủy (Destruction) ðịnh nghĩa tính Bền vững (Persistence) ðịnh nghĩa tính đóng gói liệu (Data Encapsulation) Hiểu biết tính Thừa kế (Inheritance) ðịnh nghĩa tính ða hình (Polymorphism) Liệt kê ưu điểm phương pháp hướng ðối tượng 1.1 Giới thiệu Lập trình hướng ðối tượng (Object-oriented Programming) Lập trình hướng ðối tượng (OOP) phương pháp thiết kế phát triển phần mềm Những ngôn ngữ OOP không bao gồm cú pháp trình biên dịch (compiler) mà cịn có mơi trường phát triển tồn diện Mơi trường bao gồm thư viện ñược thiết kế tốt, thuận lợi cho việc sử dụng ñối tượng ðối với ngơn ngữ lập trình hỗ trợ OOP việc triển khai kỹ thuật lập trình hướng đối tượng dễ dàng Kỹ thuật lập trình hướng đối tượng cải tiến việc phát triển hệ thống phần mềm Kỹ thuật ñề cao nhân tố chức (functionality) mối quan hệ liệu OOP phương thức tư ñể giải vấn ñề máy tính ðể đạt kết quả, lập trình viên phải nắm vấn ñề thành thực thể quen thuộc với máy tính Cách tiếp cận hướng đối tượng cung cấp giải pháp tồn vẹn để giải vấn đề Hãy xem xét tình cần triển khai thành hệ thống máy vi tính: việc mua bán xe Vấn đề vi tính hóa việc mua bán xe bao gồm gì? Những yếu tố rõ ràng liên quan ñến việc mua bán xe là: 1) Các kiểu xe (model) 2) Nhân viên bán hàng 3) Khách hàng Những hoạt ñộng liên quan ñến việc mua bán: 1) Nhân viên bán hàng đưa khách hàng tham quan phịng trưng bày 2) Khách hàng chọn lựa xe 3) Khách hàng ñặt hóa ñơn 4) Khách hàng trả tiền 5) Chiếc xe ñược trao cho khách hàng Mỗi vấn ñề ñược chia thành nhiều yếu tố, ñược gọi ðối tượng (Objects) Thực thể (Entities) Chẳng hạn ví dụ trên, khách hàng, xe nhân viên bán hàng ñối tượng thực thể Lập trình viên ln ln cố gắng tạo kịch (scenarios) thật quen thuộc với tình thực tiễn Bước thứ phương pháp làm cho máy tính liên kết với đối tượng giới thực Tuy nhiên, máy tính cỗ máy Nó thực cơng việc lập trình mà thơi Vì thế, trách nhiệm lập trình viên cung cấp cho máy tính thơng tin theo cách thức mà nhận thức ñược thực thể nhận thức ðó vai trị kỹ thuật hướng đối tượng Chúng ta sử dụng kỹ thuật hướng ñối tượng ñể ánh xạ thực thể gặp phải ñời sống thực thành thực thể tương tự máy tính Phát triển phần mềm theo kỹ thuật lập trình hướng đối tượng có khả giảm thiểu lẫn lộn thường xảy hệ thống lĩnh vực ứng dụng Lập trình hướng đối tượng đề cập ñến liệu thủ tục xử lý liệu theo quan ñiểm ñối tượng Lập trình hướng đối tượng xem xét liệu thực thể ñơn vị ñộc lập, với chất riêng đặc tính thực thể Bây khảo sát thuật ngữ ‘ñối tượng’ (object), ‘dữ liệu’ (data) ‘phương thức’ (method) Có nhiều loại đối tượng khác Chúng ta xem phận khác quan ñối tượng ðiển hình quan có phận liên quan ñến việc quản trị, ñến việc kinh doanh, ñến việc kế tốn, đến việc tiếp thị … Mỗi phận có nhân riêng, nhân giao cho trách nhiệm rõ ràng Mỗi phận có liệu riêng chẳng hạn thơng tin cá nhân, bảng kiểm kê, thể thức kinh doanh, liệu liên quan ñến chức phận Rõ ràng quan chia thành nhiều phận việc quản trị nhân hoạt ñộng doanh nghiệp dễ dàng Nhân quan ñiều khiển xử lý liệu liên quan ñến phận Chẳng hạn phận kế tốn chịu trách nhiệm lương bổng ñối với quan Nếu người ñơn vị tiếp thị cần chi tiết liên quan đến lương bổng đơn vị mình, người cần liên hệ với phận kế toán Một người có thẩm quyền phận kế tốn cung cấp thông tin cần biết, thông tin chia sẻ Một người khơng có thẩm quyền từ phận khác khơng thể truy cập liệu, khơng thể thay đổi làm hư hỏng liệu Ví dụ minh chứng ñối tượng hữu dụng việc phân cấp tổ chức liệu Hình 1.1 Minh họa cấu trúc quan điển hình Phịng Nhân Phịng Kế tốn Phịng Kinh doanh Hình 1.1 Khái niệm đối tượng mở rộng đến hầu hết lãnh vực ñời sống, nữa, ñến giới lập trình Bất kỳ ứng dụng ñều ñược ñịnh nghĩa theo thuật ngữ thực thể đối tượng để tạo tiến trình xử lý mơ theo tiến trình xử lý mà người nghĩ Phương pháp giải ‘top-down’ (từ xuống) cịn gọi ‘lập trình hướng cấu trúc’ (structured programming) Nó xác định chức chương trình chức phân thành ñơn vị nhỏ cho ñến mức ñộ thấp Bằng kỹ thuật này, chương trình cấu trúc theo hệ thống phân cấp module Mỗi module có đầu vào riêng ñầu riêng Trong module, ñiều khiển có chiều hướng xuống theo cấu trúc khơng có chiều hướng lên Phương pháp OOP cố gắng quản lý việc thừa kế phức tạp vấn ñề thực tế ðể làm ñược việc này, phương pháp OOP che giấu vài thông tin bên ñối tượng OOP tập trung trước hết liệu Rồi gắn kết phương thức thao tác liệu, việc ñược xem phần thừa kế việc ñịnh nghĩa liệu Bảng 1.1 minh họa khác biệt hai phương pháp: OOP Phương pháp Top-Down Chúng ta xây dựng khách Chúng ta xây dựng tòa nhà 10 tầng sạn với dãy phịng trung bình, sang trọng, phịng họp lớn Chúng ta thiết kế tầng lầu, Chúng ta xây dựng khách sạn với phòng phòng họp thành phần Bảng 1.1 Một ví dụ hai phương pháp giải OOP Structured 1.2 Trừu tượng hóa liệu (Data Abstraction) Khi lập trình viên phải phát triển chương trình ứng dụng khơng có nghĩa người viết mã cho ứng dụng Trước hết, người phải nghiên cứu ứng dụng xác ñịnh thành phần tạo nên ứng dụng Kế tiếp, người phải xác định thơng tin cần thiết thành phần Hãy khảo sát chương trình ứng dụng cho việc mua bán xe nói Chương trình phải xuất hóa đơn cho xe bán cho khách hàng ðể xuất hóa đơn, cần thông tin chi tiết khách hàng Vậy bước thứ xác định đặc tính khách hàng Một vài đặc tính gắn kết với khách hàng là: Tên ðịa Tuổi Chiều cao Màu tóc Từ danh sách kể trên, xác ñịnh đặc tính thiết yếu ứng dụng Bởi ñang ñề cập ñến khách hàng mua xe, chi tiết thiết yếu là: Tên ðịa Còn chi tiết khác (chiều cao, màu tóc …) khơng quan trọng ứng dụng Tuy nhiên, phát triển ứng dụng hỗ trợ cho việc điều tra tội phạm thơng tin chẳng hạn màu tóc thiết yếu Bên cạnh chi tiết khách hàng, thơng tin sau cần thiết: Kiểu xe bán Nhân viên bán xe Bên cạnh đặc tính khách hàng, xe nhân viên bán hàng, cần liệt kê hành ñộng ñược thực Cơng việc xuất hóa đơn địi hỏi hành ñộng sau: Nhập tên khách hàng Nhập ñịa khách hàng Nhập kiểu xe Nhập tên nhân viên bán xe Xuất hóa đơn với định dạng địi hỏi Khung thơng tin bên cho thấy thuộc tính hành động liên quan đến hóa đơn: Các thuộc tính Tên khách hàng ðịa khách hàng Kiểu xe bán Nhân viên bán xe Các hành ñộng Nhập tên Nhập ñịa Nhập kiểu xe Nhập tên nhân viên bán xe Xuất hóa ñơn ðịnh nghĩa Sự trừu tượng hóa liệu q trình xác định nhóm thuộc tính hành ñộng liên quan ñến thực thể cụ thể, xét mối tương quan với ứng dụng ñang phát triển Tiếp theo, muốn ứng dụng tính tốn tiền hoa hồng cho nhân viên bán hàng Những thuộc tính liên kết với nhân viên bán hàng có tương quan với ứng dụng là: Tên Số lượng xe bán ñược Tiền hoa hồng Những hành ñộng địi buộc cơng việc là: Nhập tên nhân viên bán xe Nhập số lượng xe bán ñược Tính tiền hoa hồng kiếm Những thuộc tính Tên Số lượng xe bán ñược Tiền hoa hồng Những hành ñộng Nhập tên Nhập số lượng xe bán ñược Tính tiền hoa hồng Như thế, việc trừu tượng hóa liệu tra ñặt câu hỏi ‘ðâu thuộc tính hành động cần thiết cho vấn ñề ñặt ra?’ 1.2.1 Những ưu ñiểm việc Trừu tượng hóa Những ưu điểm việc Trừu tượng hóa là: Tập trung vào vấn ñề Xác ñịnh ñặc tính thiết yếu hành động cần thiết Giảm thiểu chi tiết không cần thiết Việc trừu tượng hóa liệu cần thiết, khơng thể mơ tất hành động thuộc tính thực thể Vấn đề mấu chốt tập trung ñến hành vi cốt yếu áp dụng chúng ứng dụng Chẳng hạn khách hàng nhân viên bán hàng thực hành ñộng sau: Người ñi lại Người nói chuyện Tuy nhiên, hành động khơng liên quan đến ứng dụng Việc trừu tượng hóa liệu loại bỏ chúng 1.3 Lớp (Class) Trong ứng dụng mua bán xe, ñã xác ñịnh thuộc tính hành động cần có để xuất hóa đơn cho khách hàng Các hành động thuộc tính chung cho khách hàng mua xe Ví thể, chúng nhóm lại thực thể ñơn gọi ‘lớp’ Hãy khảo sát lớp có tên ‘khách hàng’ Lớp bao gồm thuộc tính hành động địi hỏi khách hàng Lớp Khách hàng Tên khách hàng ðịa khách hàng Kiểu xe ñược bán Nhân viên bán xe Nhập tên Nhập ñịa Nhập kiểu xe ñược bán Nhập tên nhân viên bán xe Xuất hóa đơn ðịnh nghĩa Một lớp ñịnh nghĩa thực thể theo thuộc tính hành động chung Hoặc Những thuộc tính hành động chung thực thể nhóm lại ñể tạo nên ñơn vị gọi lớp Hoặc Một lớp xác ñịnh cấp chủng loại thực thể giống Một lớp mơ hình khái niệm thực thể Nó mang tính cách tổng qt khơng mang tính cách đặc thù Khi định nghĩa lớp, muốn phát biểu lớp phải có tập hợp thuộc tính hành ñộng riêng Chẳng hạn ñịnh nghĩa lớp ñây: Lớp Con người Tên Chiều cao Màu tóc Viết Nói Lớp định nghĩa thực thể ‘Con người’ Mọi thực thể thuộc kiểu ‘Con người’ có ñặc tính hành ñộng ñã ñược ñịnh nghĩa Một lớp ñã ñược ñịnh nghĩa, biết thuộc tính hành động thực thể ‘trơng giống’ lớp Vì thế, tự chất lớp nguyên mẫu (prototype) Một ví dụ khác lớp liên quan ñến việc mua bán xe sau: Lớp Nhân viên bán hàng Tên Số lượng xe bán ñược Tiền hoa hồng Nhập tên Nhập số lượng xe bán ñược Tính tiền hoa hồng Lớp định nghĩa thuộc tính hành động đặc trưng cho nhân viên bán xe 1.4 ðối tượng (Object) Một lớp nguyên mẫu phác họa thuộc tính hành động thực thể ðể sử dụng thực thể mà lớp định nghĩa, phải tạo ‘đối tượng’ từ lớp Lớp khái niệm, cịn đối tượng thể ñược ñịnh nghĩa lớp Hãy khảo sát lớp ‘Khách hàng’ ñược ñịnh nghĩa Lớp ñịnh nghĩa thuộc tính hành động gắn liền với khách hàng Khi người mua xe cửa hàng, cửa hàng có khách hàng Vào thời ñiểm ấy, ñối tượng giống lớp ‘Khách hàng’ ñược tạo ðối tượng phải có giá trị thực thuộc tính ‘Tên’, ‘ðịa chỉ’, ‘Kiểu xe’ … Chẳng hạn khách hàng có tên ‘Mark’, sống ‘London’ ñã mua xe kiểu ‘Honda Civic’ từ nhân viên bán hàng tên ‘Tom’ Như thế, ‘Mark’ ñối tượng kiểu ‘Khách hàng’ ðịnh nghĩa: Một ñối tượng trường hợp lớp Một đối tượng thực thể cụ thể (thơng thường bạn sờ chạm, xem thấy cảm nhận) Kể từ lúc ñối tượng hữu, thuộc tính giá trị xác định, hành ñộng ñược ñịnh nghĩa cho ñối tượng ñược thực thi Trong ñối tượng, khía cạnh sau xác định rõ: Tình trạng (state) Thái độ (behavior) Chân tính (identity) Hình 1.2 trình bày hai ñối tượng Con người Xe Tên: Jack Tuổi: 28 Trọng lượng: 65 kgs Kiểu: Ferrari Màu: ðỏ Năm: 1995 Hành động: ði Nói Suy nghĩ Hành động: Khởi động Ngưng Chuyển động Hình 1.2: Một đối tượng Con người ñối tượng Xe Mỗi ñối tượng có đặc tính riêng mơ tả đối tượng gì, hành động Chẳng hạn thuộc tính đối tượng ‘Con người’ là: Tên Tuổi Trọng lượng Những thuộc tính ñối tượng ‘Xe hơi’ là: Màu sắc Kiểu xe Năm Một ñối tượng thực số hành động Một xe có khả thực hành ñộng sau: Khởi ñộng Ngưng Chuyển ñộng ðể chuyển đổi đối tượng lập trình ñối tượng ñời thực, cần phải kết hợp thuộc tính hành động đối tượng 1.4.1 Thuộc tính Chúng ta xác định thuộc tính hành ñộng ñể ñịnh nghĩa lớp Một thuộc tính gán cho giá trị, chúng mơ tả đối tượng Hãy khảo sát lớp sau: Các thuộc tính lớp Khách hàng Tên khách hàng ðịa khách hàng Kiểu xe ñược bán Nhân viên bán xe Khi thuộc tính ‘Tên’ gán cho giá trị ‘Mark’ mơ tả ñối tượng xác ñịnh ñược tạo từ lớp ‘Khách hàng’ ðịnh nghĩa Một thuộc tính đặc tính mơ tả đối tượng Như thế, thuộc tính nắm giữ giá trị liệu ñối tượng, chúng ñịnh nghĩa ñối tượng cụ thể Bởi lớp nguyên mẫu thuộc tính lớp khơng thể nắm giữ giá trị Một thuộc tính gán giá trị sau ñối tượng dựa lớp tạo ðể lưu giữ chi tiết khách hàng, thể hiện(ñối tượng) lớp ‘Khách hàng’ phải ñược tạo Các thuộc tính đối tượng hữu ñối tượng ñược tạo Mọi ñối tượng lớp phải có thuộc tính Khảo sát ví dụ sau: Các thuộc tính lớp Con người Tên Chiều cao Màu tóc = = = 10 ðối tượng ñược tạo từ lớp Con người Mark ft in Black PageFormat Printerjob Lớp ‘Page’ ñịnh nghĩa đặc tính vật lý giấy in Ngồi cung cấp khổ giấy vùng vẽ Lớp ‘Book’ lớp đối tượng trì danh sách trang in Lớp cung cấp phương thức ñể bổ sung quản lý trang thực thi giao diện Pageable Lớp ‘PageFormat’ ñịnh nghĩa lề trang lề ‘Top’, ‘Bottom’,’Left’ ‘Right’ Nó định kích cỡ hướng in ‘Portait’ (khổ dọc) ‘Landscape’ (khổ ngang) Lớp ‘Printerjob’ lớp ñối lượng khởi tạo, quản lý, ñiều khiển yêu cầu máy in Lớp định tính chất in Dưới ngoại lệ lỗi mà gói java.awt.print kích hoạt: PrinterException PrinterIOException PrinterAbortException ‘PrinterException‘ mở rộng lớp java.lang.Exception nhằm cung cấp lớp sở ñể in ngoại lệ liên quan ‘PrinterIOException’ mở rộng lớp ‘PrinterException’ nêu rõ lỗi I/O ‘PrinterAbortException’ lớp lớp PrinterException nêu rõ khối in bỏ ngang 221 Tóm tắt học Một luồng lộ trình qua liệu di chuyển chương trình java Khi luồng liệu ñược gửi nhận.Chung ta xem ghi đọc luồng theo thứ tự nêu Luồng nhập/xuất bao gồm lớp sau ñây: o Lớp System.out o Lớp System.in o Lớp System.err Lớp InputStream lớp trừu tượng ñịnh nghĩa cách nhận liệu Lớp OutputStream lớp trừu tượng Nó định nghĩa ghi luồng kết xuất Lớp ByteArrayInputStream tạo luồng nhập từ vùng ñệm nhớ ByteArrayOutputStream tạo luồng xuất mãng byte Java hổ trợ tác vụ nhập/xuất tập tin với trợ giúp File, FileDescriptor, FileInputStream FileOutputStream Các lớp Reader Writer lớp trừu tượng hỗ trợ ñọc ghi luồng ký tự Unicode CharArrayReader, CharArrayWriter khác với ByteArrayInputStream, ByteArrayOutputStream hỗ trợ ñịnh dạng nhập/xuất bit, Trong ByteArrayInputStream, ByteArrayOutputStream hỗ trợ nhập/xuất 16bit Lớp PrintStream thực thi kết xuất lớp có phương thức bổ sung, giúp ta in kiểu liệu Lớp RandomAccessFile cung cấp khả thực I/O tới vị trí cụ thể tập tin 222 Kiểm tra mức ñộ tiến dàn ống (pipelines) ñể gửi nhận thơng tin chương trình java - luồng lỗi chuẩn Phương thức - ñọc byte liệu từ luồng Phương thức - trả giá trị boolean, nêu rõ luồng có hỗ trợ khả mark reset hay không Phương thức xả luồng Nhập/xuất mảng byte sử dụng lớp Lớp - ñược sử dụng truy cập ñối tượng thư mục tập tin chưa ñể lưu giữ liệu 223 Bài tập Viết chương trình nhận dịng văn từ người dùng hiển thị đoạn văn lên hình Viết chương trình chép nội dụng tập tin tới tập tin khác Viết chương trình tạo tập tin truy cập ngẫu nhiên kết xuất hiển thị phía Các ghi nên lưu dạng tập tin ‘.dat’, người dùng truy cập chúng nhanh 224 Ch ng 10 TH C THI B O M T Mục tiêu học: Cuối chương bạn Mơ tả cơng cụ JAR Tạo xem file JAR, liệt kê trích rút nội dung file Sử dụng chữ ký ñiện tử (Digital Signatures) ñể nhận dạng Applets Tạo cơng cụ khóa bảo mật (Security key) Làm việc với chứng số (Digital Certificate) Tìm hiểu gói Java.security 10.1 Giới thiệu Trong phần này, tìm hiểu chi tiết bảo mật Java applet Chúng ta thảo luận mơ hình bảo mật JDK 1.2 ñáp ứng nhu cầu người dùng nhà phát triển Java ngơn ngữ lập trình gởi chương trình khơng tương tác file văn bản, file ảnh thông tin tĩnh thông qua World Wide Web Các chương trình này, khơng giống chương trình CGI, chạy hệ thống người dùng, chạy máy chủ Web (Web server) Bảo mật Java Applet quan tâm người dùng nhà phát triển applet Thiết tính bảo mật applet dẫn tới sửa đổi phơi bày liệu nhạy cảm Mơ hình bảo mật Java 2, JDK 1.2 hữu ích cho người dùng, cho nhà phát triển Nó giúp người dùng trì mức độ bảo mật cao Trong chương nay, học mơ hình bảo mật JDK 1.2 10.2 Công cụ JAR Một file JAR file lưu trữ nén cơng cụ lưu trữ Java tạo File tương tự chương trình PKZIP Nó chứa nhiều file file lưu trữ ðiều cho phép tải trình duyệt hiệu Dùng jar với applet cải tiện ñáng kể khả thực trình duyệt Vì tấc tất file ñược biên dịch file đơn, trình duyệt cần thiết lập kết nối HTTP với web server Nén file giảm 50% thời gian tải file ðể khởi động cơng cụ JAR, dùng câu lệnh sau dấu nhắc lệnh: jar [options][manifest] jar-file input-file(s) Tuỳ chọn c Mô tả Tạo lưu trữ 225 t x v f m o M Ghi vào bảng nội dung cho lưu trữ Trích dẫn file có tên từ lưu trữ Tạo nguồn xuất ña dòng (verbose output) lỗi chuẩn Xác ñịnh tên file lưu trữ Bao hàm thông tin chứng thực từ file chứng thực xác ñịnh Lưu trữ ‘use no zip’ nén Không tạo file chứng thực cho mục (entries) Bảng 0.1 công cụ jar Một file chứng thực chứa thông file lưu trữ File tuỳ chọn Thậm chí file khơng xác định JAR tự động tạo File jar ñược dùng lưu trữ File phải có phần mở rộng ‘.jar’ xác định dịng lệnh File đầu vào (input-file) danh sách phân cách file ñược ñặt lưu trữ Netscape Navigator Internet Explorer hỗ trợ file JAR Câu lệnh sau lưu trữ tất file class file java bao gồm thư mục xác ñịnh vào file jar gọi ‘pack’ jar cf pack.jar *.class *.java Tên câu lệnh Tạo lưu trữ Xác ñịnh lưu trữ Tên file Các file lưu trữ Hình 10.1 lệnh jar Dùng lệnh sau dấu nhắc liệt kê file file ‘pack.jar’ jar tf pack.jar Tuỳ chọn ñược sử dụng cho bảng nội dung lưu trữ Tuỳ chọn xác định tên file lưu trữ Hình 10.2 Liệt kê file file pack.jar ðể gộp file lưu trữ ‘pack.jar vào applet, mở trang HTML, thêm thuộc tính ARCHIVE=’pack.jar’ vào thẻ applet, sau: ARRCHIVE=”pack.jar” height=125 Thuộc tính cho trình duyệt nạp lưu trữ ‘pack.jar’ để tìm file ‘exr7.class’ 226 Câu lệnh sau trích rút file nén file pack.jar: jar xvf pack.jar Mục chọn ‘x’ cho phép bạn trích rút nội dung file 10.3 Chữ ký ñiện tử (Digital Signature) ñể ñịnh danh applet Trong java, bảo mật applet web phần quan trọng Hacker viết applet nguy hiểm xuyên thủng hàng rào bảo mật Vì thế, applet hạn chế can thiệt ngôn ngữ Applet khơng hỗ trợ số nét đặt trưng sau: ðọc ghi file từ hệ thống nơi applet ñang chạy Lấy thơng tin file từ hệ thống Xố file từ hệ thống Java thực tất ñặc ñiểm trên, với applet cung cấp từ nhà cung cấp applet tin cậy, ký danh số (digitally signed) Hình sau minh họa q trình mã hố khố Hình 10.3 Mã hố dựa khố Trong hình trên, khố cơng cộng (public keys) dùng mã hố giải mã Cùng ý tưởng ñược sử dụng cho chữ ký số, thêm tính bổ sung Một chữ ký số file mã hố cung cấp chương trình nhận dạng xác nguồn gốc file Khóa bí mật tính giá trị từ file applet Người giữ khố bí mật kiểm tra nội dung ñối tượng Trong ñịnh danh số, khóa riêng (private key) sử dụng để mã hóa, khố cơng cộng, dùng giải mã Trong ký danh (sign) ñối tượng, người ký danh dùng thuật tốn tóm lược thơng báo MD5 để tính bảng tóm 227 lược đối tượng Bảng tóm lược dùng dấu tay cho đối tượng bảng tóm lược mã hố dùng khóa riêng, đưa chử ký điện tử đối tượng Khố cơng cộng ký duyệt dùng để mã hoá chữ ký kiểm tra chúng Kết giải mã, giá trị tóm lược đưa Giá trị tóm lược đối tượng tính so sánh với giá trị tóm lược giải mã Nếu giá trị tóm lược (digest) đối tượng giá trị tóm lược mã hố khớp với nhau, chữ ký được xác nhận Tài liệu mơ tả chữ ký ñược gọi “Chứng thực” (Certificate) Thiết lập uỷ thác (trust), nhận dạng applet ñược chứng nhận Chứng nhận thực thể sử dụng khóa cơng cộng đặt biệt Quyền chứng thực (a certificate authority) ñược dùng thực chứng nhân Nhận ñược ñược chứng thực từ CA (Certificate Authority), applet phải đệ trình tài liệu chứng thực nhận dạng Hiện cơng ty đưa dịch vụ xác nhận chứng thực sau: VeriSign Chứng thực Thawte Bạn thiết lập mức bảo mật khác Một applet đưa uỷ thác hồn tồn, khơng uỷ thác, với giúp đỡ tập lớp gọi “Quyền” (Permissions) Nhưng nhìn chung, applet ñược giới hạn cách ñầy ñủ, trừ nhà phát triển ký danh applet ðiều thiết lập cho nhà phát triển đáng tin cậy 10.4 Khố bảo mật Java (Java Security key) Chúng ta cần tạo công cụ, tên là, ‘jar’, ‘jarsigner’, ‘keytool’, trước dùng applet ký danh Chúng ta cần tạo cặp khóa cơng cộng/riêng, làm cho trở nên sẵn sàng với công cụ jarsigner Bây giờ, tạo cơng dụng keystore Keystore (Lưu trữ khố) Keystore sở liệu khoá, chứa chứng thực số dùng ñể nhận dạng giá trị khố cơng cộng Keytool (Cơng cự khố) Keytool cơng cụ khoá bảo mật java, tạo quản lý khóa cơng cộng, khố riêng, chứng thực bảo mật Nó thực hiện: o Quản lý cặp khố cơng cộng/riêng o Lưu trữ khố cơng cộng o Dùng chứng thực ñể xác thực chứng thực khác o Xác thực (Authenticate) liệu nguồn 228 Tất thơng tin mà keytool quản lý lưu trữ sở liệu gọi keystore Sun có keystore mật định dùng định dạng file gọi JKS (java key store Lưu trữ khoá java) ðể kiểm hệ thống bạn có keystore ñịnh dạng này, thực câu lệnh sau dấu nhắc lệnh: Keytool –list Thông báo lỗi sau xuất bạn khơng có keystore bạn Keytool error: keystore file does not exist: c:\windows\.keystore JDK tìm keystore thư mục C:\windows\ ðây vị trí chung cho file hệ thống quan trọng windows 95, 98 NT systems Tuỳ chọn keystore sử dụng lệnh keytool, sau: keytool –list keystore c:\java\try Câu lệnh cho JDK tìm keystore file gọi ‘try’ thư mục ‘C:\java\try’ Nếu khơng tìm thấy, hiển thị thơng báo lỗi Mục ‘-genkey’ sử dụng với câu lệnh keytool để tạo cặp khố cơng cộng/riêng Bạn dùng số tuỳ chọn khác Dạng ñơn giản sau: keytool –genkey –alias “I” Bí danh (alias) dùng lưu trữ, thay xố cặp khố Các bí danh keytool không phân biệt chữ hoa Trong lệnh trên, không sử dụng tuỳ chọn keystore Nếu câu lệnh sử dụng tuỳ chọn keystore, ñược viết lại sau: keytool –genkey –alias “I” –keystore “store” Trong lệnh trên, cặp khố lưu trữ keystore ‘store’, khơng lưu keystore mật định hệ thống Sau nhập lệnh vào, nhấn phím enter, keytool nhắc bạn nhập vào mật (password) cho keystore, sau: Enter keystore password 229 Nhập vào ‘password’ yêu cầu Tiếp theo, keytool nhắc bạn nhập vào thông tin bổ sung như: What is your first and last name? (Tên họ) [unknown] what is the name of your organization unit? [unknown]: software Development What is the name of your organization? (Tên tổ chức) [Unknown]: ABC Consultants (tư vấn ABC) What is the name of your city or Locality? (tên thành phố ñịa phương bạn) [Unknown]: California What is the name of your State or Province? (tên bang tỉnh bạn) [Unknown]:United States of America What is the two-letter country code for this unit?(Mã quốc gia với ký tự) [Unknown]: US Khi bạn nhập vào thơng tin, keytool hiển thị thông tin sau: Is correct? [no]: Cuối cùng, keystool nhắc bạn nhập vào mật cho khoá riêng bạn, như: Enter key password for (RETURN if same as keystore password) Thơng tin sử dụng ñể kết hợp phân biệt tên (name) X500 với bí danh (alias) Thơng tin ñưa vào trực tiếp từ mục chọn ‘dname’ Mật sau phần biệt với mật keystore Nó dùng truy cập khố riêng cặp khố cơng cộng Mật trực tiếp rõ cách sử dụng tuỳ chọn ‘-keypass’ Nếu mật không rõ, mật keystore ñược ñược dùng Tuỳ chọn ‘-keypasswd’ dùng thay ñổi mật Tuỳ chọn ‘-keyalg’ rõ thuật toán tạo cặp khoá Khi bạn tạo khố bổ sung vào keystore, bạn dùng tuỳ chọn ‘-list’ keytool để xem khố có keystore hay khơng 230 ðể xố cặp khố từ sớ liệu, dùng lệnh sau: keytool –delete –alias aliasName ‘aliasName’ tên khố xố Bây giờ, tạo cặp khố riêng/cơng cộng cho file JAR, ký danh Lệnh jarsigner dùng để ký danh file JAR Nhập lệnh sau vào dấu nhắc DOS: jarsigner –keystore keyStore –storepass storePassword –keypass keyPassword Bảng sau cung cấp danh sách JARFileNames bí danh: Tuỳ chọn keyStore storePassword keyPassword JARFileName Alias Mô tả Tên keystore sử dụng Mật keystore Mật khoá riêng Tên file JAR ký danh Bí danh ký danh Bảng 10.2 JARFileNames bí danh ðể ký danh file JAR ‘pack.jar’, với keystore ‘store’, mật để lưu trữ khố riêng ‘password’, dùng lệnh sau: jarsigner –keystore store –storepass password –keypass password pack.jar pk ‘pk’ nghĩa tên bí danh Nếu tuỳ chọn ‘-keystore’ khơng rõ, keystore mật định dùng ðể rõ chữ ký file JAR ñược ñịnh danh, dùng tuỳ chọn ‘-verify’ jarsigner –verify pack.jar ‘pack.jar’ tên file JAR Nếu chữ ký không hợp lệ, ngoại lệ sau ném (thrown) Jarsigner:java.util.zip.ZipException:invalid entry size (expected 900 but got 876 bytes) 231 Ngược lại, xuất thơng báo “jar verified” (jar xác minh) Quá trình xác thực kiểm tra theo bước sau: Có file ‘.DSA’ chứa chữ ký hợp lệ cho file chữ ký SF khơng Có mục file chữ ký tóm lược hợp lệ cho mục tương ứng file kê khai (manifest file) 10.5 Chữ ký ñiện tử (Digital Certificates) Cho ñến bây giờ, ñã học cách tạo ký danh file JAR Bây giờ, học cách xuất chữ ký ñiện tử (digital certificates), sử dụng ñể xác thực chữ ký file JAR Chúng ta học nhập chữ ký ñiển tử từ file Chữ ký ñiện tử file, ñối tượng, thông báo ñược ký danh quyền chứng thực (certificate authority) The CA (Certificate authority) cấp chứng nhận giá trị khố cơng cộng Chứng nhận X.509 tổ chức International Standards Organization dạng chứng nhận số phổ biến Keytool hổ trợ chứng nhận Keytool bước ñầu tiên cần nhận ñược chứng nhận (certificate) Chúng ta dùng chứng nhận tạo cặp khố ‘cơng cộng/riêng’ (private/public) Keytool nhập vào chứng nhận ñã ñược tạo ñược ký danh Keytool tự động gắn (bundle) khố cơng cộng với chứng nhận Cùng thực thể tạo khố cơng cộng ký danh chứng nhận ðó gọi ‘self-signed certificates’ (Chứng nhận tự ký danh) Các chứng nhận khơng phải chứng nhận đáng tin cậy cho ñịnh danh Tuy nhiên, chúng cần ñể tạo yêu cầu ký danh chứng nhận (certificate-signing request) Keytool tuỳ chọn ñược sử dụng ñể tạo chứng nhận Câu lệnh sau giúp tạo chứng nhận trên: keytool –keystore store –alias mykey –certreq –file mykey.txt Cặp khố tạo ‘mykey’ Tuỳ chọn ‘-file’ tên file, mà yêu cầu ký danh chứng nhận dùng ñể lưu Dùng lệnh ‘-export’ xuất chứng nhận sau: keytool –export –keystore store –alias pk –file mykey 232 Câu lệnh hiển thị dấu nhắc sau: Enter keystore password Chứng nhận ñã lưu trữ ðể nhập chứng nhận khác vào keystore bạn, nhập câu lệnh sau: keytool import –keytool keystore –alias alias –file filename Tên ñược tên file chứa chứng nhận ñược nhập vào (imported certificate) Câu lệnh sau tên bí danh ‘alice’ ñể nhập chứng nhận file ‘mykey’ vào keystore ‘MyStore’: keytool –import –keystore MyStore –alias alice –file mykey Câu lệnh hiển thị dấu nhắc sau: Enter keystore password (Nhập vào mật keystore) Kết xuất hiển thị hai tuỳ chọn –Owner Issuer Nó hiển thị tên cơng ty, nghề nghiệp, tổ chức, địa điểm, bang tiền tệ Nó hiển thị số serial thời gian có giá trị Cuối cùng, hỏi có chứng nhận uỷ thác khơng Chứng nhận chấp thuận cho uỷ thác riêng bạn Dùng lệnh ‘-list’ liệt kê nội dung keystore sau: keystool –list –keystore Store Câu lệnh yêu yều password keystore Dùng tuỳ chọn ‘-alias’ liệt kê mục Dùng lệnh -delete để xố bí danh keystore, sau: keytool –delete –keystore Store –alias alias Dùng lệnh ‘-printcert’ in chứng nhận ñược lưu trữ file, theo cách sau: 233 keytool –printcert –file myfile Dùng lệnh ‘-help’ nhận danh sách tất lệnh keytool hổ trợ: keytool -help 10.6 Các gói bảo mật java (JAVA Security packages) Các gói bảo mật Java bao gồm: java.security ðây gói API nhân bảo mật (the core security API package) Chứa lớp giao diện (interface) hỗ trợ mã hố (encryption), tính bảng tóm lược tài liệu chữ ký ñiện tử java.security.acl Chứa giao diện dùng cài ñặt sách ñiều kiển truy cập java.security.cert Cung cấp hổ trợ cho chứng nhận X.509 java.security.interfaces ðịnh nghĩa giao diện truy cập thuật toán chữ ký ñiện tử (the digital signature algorithm) java.security.spec Cung cấp lớp độc lập phục thuộc vào thuật tốn cho khố Tóm tắt: Nếu khả bảo mật applet khơng đảm bảo, liệu nhạy cảm sữa đổi phơi bày Mục đích JAR kết nối file mà applet sử dụng file nén ñơn ðiều cho phép applet nạp vào trình duyệt cách hiệu Một file kê khai (manifest file) chứa thông tin file lưu trữ Chữ ký ñiện tử mã hố kèm với chương trình để nhận diện xác nơi nguồn gốc file Keystore sở liệu khố Keytool cơng cụ khố bảo mật java chứng nhận điện tử file, đối tượng, thơng báo ñược ký danh quyền chứng nhận (certificate authority) Kiểm tra kiến thức: File file lưu trữ ñược nén Tuỳ chọn _, dùng với cơng cụ jar, trích rút tên file từ lưu 234 trữ (file) JAR tự động tạo file kê khai, chí khơng true/false Thuộc tính ,khi dùng thẻ applet, cho trình duyệt nạp file jar lưu trữ cụ thể, tìm file class nhập vào Trong chữ ký ñiện tử, _được dùng cho mã hố _được dùng cho giải mã Tất thơng tin keytool quản lý, ñược lưu trữ sở liệu gọi _ keytool bước ñầu tiên cần nhận ñược chứng nhận true/false Gói _chứa giao diện (interfaces) dùng cài đặt sách điều kiển truy cập Bài tập: Tạo câu lệnh java thực hành ñộng sau: Tạo file jar ‘core-java.jar’ chứa file lớp (class file) file nguồn Liệt kê nội dung file jar Tạo file html cho file CardLayoutDemo.class,file lớp ñược chứa file jar trích rút (extract) file jar Dùng lệnh keytool với tên bí danh keystore để tạo cặp khố cơng cộng/riêng Ký danh file jar ñược tạo Xác minh chữ ký (signature) Xuất chứng nhận (certificate) Liệt kê nội dung keystore 10 In chứng nhận ñược lưu file 235 ... MƠN JAVA Mục tiêu Nắm ñặc trưng Java Các kiểu chương trình Java Ðịnh nghĩa máy ảo Java Các nội dung JDK (Java Development Kit) Sơ lược ñặc trưng Java2 2.1 Giới thiệu Java Java ngôn ngữ lập trình. .. 2.4 Máy ảo Java (JVM -Java Virtual Machine) Máy ảo Java trái tim ngôn ngữ Java Môi trường Java bao gồm năm phần tử sau: Ngôn ngữ Ðịnh nghĩa Bytecode Các thư viện lớp Java/ Sun Máy ảo Java (JVM)... ñổi tên thành Java Mặc dù mục tiêu ban đầu khơng phải cho Internet đặc trưng khơng phụ thuộc thiết bị nên Java trở thành ngơn ngữ lập trình cho Internet 2.1.1 Java Java ngơn ngữ lập trình hướng