Tải bản đầy đủ (.pdf) (55 trang)

Tìm hiểu về thuật toán rsa và lập trình mobile, xây dựng ứng dụng minh hoạ

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.4 MB, 55 trang )

GVHD ThS. Nguyễn Cơng Nhật

Khố luận tốt nghiệp

LỜI CẢM ƠN
Sau một quá trình nghiên cứu và thực hiện, luận văn “Tìm hiểu về
thuật tốn RSA và lập trình mobile, xây dựng ứng dụng minh họa” đã phần
nào hoàn thành. Ngoài sự cố gắng hết mình của bản thân, em đã nhận được rất
nhiều khích lệ và giúp đỡ từ phía nhà trường, thầy cơ, gia đình và bạn bè.
Em xin chân thành cảm ơn quý thầy cô trong khoa Công Nghệ Thơng
Tin trường Đại học Vinh đã tận tình dạy bảo chúng em nhiều kiến thức bổ ích
trong suốt thời gian học tập tại trường, cũng như đã tạo điều kiện cho em
được thực hiện đề tài này.
Đặc biệt, em xin bày tỏ lòng biết ơn sâu sắc đến thầy giáo Thạc sỹ
Nguyễn Cơng Nhật, người đã tận tình hướng dẫn em trong suốt thời gian
thực hiện đề tài, từ những ý tưởng ban đầu cho đến lúc hoàn thành khố luận
quan trọng này.
Em xin cảm ơn gia đình, bạn bè, tập thể lớp 47B_CNTT những người
đã luôn bên cạnh em động viên và giúp đỡ em rất nhiều trong quá trình thực
hiện đề tài.
Em rất mong nhận được sự đánh giá, góp ý và bổ sung của quý thầy cơ
và các bạn giúp em có thể phát triển hơn nữa đề tài này.
Em xin chân thành cảm ơn !
Tp Vinh, tháng 5 năm 2010
Ngƣời thực hiện

Bùi Thị Thu Hương

SVTH: Bùi Thị Thu Hương -

Lớp 47B



Khoa: Công Nghệ Thông tin

0


GVHD ThS. Nguyễn Cơng Nhật

Khố luận tốt nghiệp

MỞ ĐẦU
1. Lý do chọn đề tài
Ngày nay điện thoại di động đã và đang trở thành một phần quan trọng
trong cuộc sống hàng ngày của người dân, với một nửa dân số trên toàn thế
giới đang sử dụng điện thoại di động.
Nếu trước đây chiếc điện thoại chỉ dùng để nghe, gọi hoặc nhắn tin thì
bây giờ để đáp ứng nhu cầu của người sử dụng rất nhiều hãng điện thoại di
động trên thế giới đã ra đời với nhiều chức năng mới và tiện ích cho người sử
dụng. Những chiếc điện thoại “thơng minh” khơng chỉ có chức năng thực hiện
và nhận cuộc gọi, nó cịn được tích hợp các chức năng khác như: nhắn tin,
duyệt web, nghe nhạc, chụp ảnh, quay phim, xem truyền hình,…Một số người
cịn sử dụng chiếc điện thoại của mình để lưu trữ những file (âm thanh, hình
ảnh, văn bản,…) quan trọng, mang tính chất riêng tư và cần được bảo mật.
Chính vì vậy, vấn đề đặt ra là cần xây dựng chương trình bảo mật cho các file
quan trọng lưu trong điện thoại.
Đó cũng chính là lý do khiến em thực hiện đề tài “Tìm hiểu về thuật
tốn RSA và lập trình mobile, xây dựng ứng dụng minh họa” với sự giúp
đỡ, hướng dẫn của thầy giáo Thạc sỹ Nguyễn Công Nhật làm đề tài cho khố
luận tốt nghiệp của mình.
2. Mục đích nghiên cứu

Tìm hiểu thuật tốn RSA và nghiên cứu về lập trình Mobile, ứng dụng
để xây dựng chương trình bảo mật các file quan trọng trên điện thoại di động.
3. Bố cục luận văn
Nội dung luận văn gồm có 3 chương:
Chƣơng I: Tổng quan về lập trình Windows Mobile
Chƣơng II: Tìm hiểu về thuật toán RSA
Chƣơng III: Xây dựng ứng dụng bảo mật thư mục cho điện thoại di động

SVTH: Bùi Thị Thu Hương -

Lớp 47B

Khoa: Công Nghệ Thông tin

1


GVHD ThS. Nguyễn Cơng Nhật

Khố luận tốt nghiệp

4. Kết quả đạt đƣợc
Đề tài “Tìm hiểu về thuật tốn RSA và lập trình Mobile, xây dựng
ứng dụng minh họa” được xuất phát từ nhu cầu thực tế nhằm tạo nền tảng cơ
sở ban đầu để hỗ trợ thêm cho các bạn muốn tìm hiểu và nghiên cứu về bảo
mật, an tồn dữ liệu.
Mặc dù đã có nhiều cố gắng, tìm hiểu các kiến thức đã học, kết hợp tra
cứu các tài liệu chuyên ngành nhưng đề tài “Tìm hiểu về thuật tốn RSA và
lập trình Mobile, xây dựng ứng dụng minh họa” do hạn chế về thời gian, khả
năng và kinh nghiệm nên khơng tránh khỏi những thiếu sót nhất định nên

khố luận đã hồn thành ở mức độ sau:
- Tìm hiểu về thuật tốn RSA.
- Tìm hiểu về lập trình Windows Mobile.
- Áp dụng để xây dựng ứng dụng thực nghiệm bảo mật dữ liệu trong
điện thoại di động.
5. Hƣớng nghiên cứu phát triển:
Tìm hiểu sâu, rộng hơn về một số thuật tốn mã hố để có thể áp dụng
rộng dãi tính bảo mật dữ liệu và chương trình…
Tìm hiểu thêm một số ngôn ngữ, các phần mềm ứng dụng để nâng cao
và mở rộng phạm vi ứng dụng tính bảo mật.

SVTH: Bùi Thị Thu Hương -

Lớp 47B

Khoa: Công Nghệ Thông tin

2


GVHD ThS. Nguyễn Cơng Nhật

Khố luận tốt nghiệp

CHƢƠNG I:
TỔNG QUAN VỀ LẬP TRÌNH WINDOWS MOBILE

1.1. Giới thiệu về Widows Mobile
Hệ điều hành Windows Mobile: Một nhánh hệ điều hành khác của nhà
khổng lồ Microsoft, Windows Mobile được phát triển từ các phiên bản

Windows CE (từ năm 1998) dùng trên các handheld PC. Windows CE sau đó
được đổi tên thành Windows Mobile, các Handheld PC được thiết kế dần cho
phù hợp và đổi tên gọi thành Pocket PC.
Ngoài việc kết hợp các nhãn hiệu riêng biệt, hệ điều hành Windows
Mobile mới cịn loại bỏ những khác biệt về cơng nghệ để mang lại cho các
nền tảng điện thoại di động và PDA những khả năng giống nhau.Một trong
những thay đổi này là sự tích hợp hỗ trợ các kết nối mạng khơng dây phạm vi
hẹp Wi-Fi, trước đây khơng có trong điện thoại di động mà chỉ dành cho máy
tính bỏ túi.
Một sự thay đổi khác được gọi là lưu trữ bộ nhớ “liên tục” giúp duy trì
các thơng tin về người dùng, địa chỉ liên hệ và những thiết lập cá nhân khi
một thiết bị bị hết pin. Tính năng này trước đây chỉ có ở các điện thoại di
động mà khơng dành cho máy tính bỏ túi.
Tuy nhiên giá thành các thiết bị sử dụng Windows Mobile đều rất cao.
1.2. Cơng cụ sử dụng
Để lập trình .NET, cần có những công cụ sau:
- Bộ phần mềm Visual Studio.NET – phiên bản 2003, 2005 hoặc 2008.
- Các thư viện nâng cao có thể download trên Internet
- Visual Studio.NET 2003 hỗ trợ .NET Framework 1.1
- Visual Studio.NET 2005 hỗ trợ .NET Framework 2.0
- Visual Studio.NET 2008 hỗ trợ .NET Compact Framework 2.0 sp2 và
3.5

SVTH: Bùi Thị Thu Hương -

Lớp 47B

Khoa: Công Nghệ Thông tin

3



GVHD ThS. Nguyễn Cơng Nhật

Khố luận tốt nghiệp

1.2.1. Thƣ viện lập trình:
Với lập trình Windows Mobile, ở đây ta cần phải có là bộ Windows
Mobile SDK. Tùy vào mỗi phiên bản của hệ điều hành Windows Mobile, mà
Microsoft cung cấp cho ta một bộ SDK tương ứng.
- Một bộ SDK thường chứa:
+ Tài liệu và các ví dụ cụ thể.
+ Các hàm API (Application Programming Interface).
+ Các công cụ cho trình soạn thảo (cụ thể là Visual Studio) và biên dịch
mã.
- Đối với Visual Studio 2008, thì Microsoft đã tích hợp bộ Windows
Mobile 5 SDK có sẵn để có thể lập trình ứng dụng cho các thiết bị chạy
Windows Mobile 5. Sau này, chúng ta sử dụng Windows Mobile 6, do đó
Microsoft cũng đã cung cấp 1 bộ Windows Mobile 6 SDK. Trong Windows
Mobile 6 SDK bao gồm:
Windows Mobile 6 SDK

Cung cấp thư viện, Emulator để phát triển

Standard

ứng dụng cho các hệ máy SmartPhone

Windows Mobile 6 SDK


Cung cấp thư viện, Emulator để phát triển

Professional

ứng dụng cho các hệ Pocket PC

Ngoài ra, trong bộ Windows Mobile 6 SDK cịn tích hợp một số công cụ
để phát triển ứng dụng tùy thuộc vào từng trường hợp cụ thể.
Giả lập dữ liệu GPS thông qua các hàm API
FakeGPS
Local Server Framework

Giả lập tương tự như một server. Khi đó ta

(aka FakeServer)

có thể kiểm tra tính kết nối của một ứng
dụng

Cellular Emulator

Giả lập song Radio thật như một thiết bị di
động với một đầy đủ tính năng như GPRS,
GSM, ….

SVTH: Bùi Thị Thu Hương -

Lớp 47B

Khoa: Công Nghệ Thông tin


4


GVHD ThS. Nguyễn Cơng Nhật

Khố luận tốt nghiệp

1.2.2. IDE soạn thảo code
Ở đây, chúng ta sử dụng Visual Studio để lập trình cho thiết bị Visual
Studio cung cấp đầy đủ tính năng, sự thân thiện để ta có thể tiếp cận lập trình
Windows Mobile một cách nhanh nhất. Nó hỗ trợ đầy đủ các chức năng, các
loại ứng dụng phát triển, hỗ trợ ngôn ngữ C#, Visual Basic, cũng như tạo các
Setup Project để triển khai ứng dụng một cách dễ dàng.
* Các nền tảng được hỗ trợ trong Visual Studio:
- Windows Mobile 2003 SE Pocket PC
- Windows Mobile 2005 Pocket PC
- Windows Mobile 2005 Smartphone
- Windows Mobile 6 Classic
- Windows Mobile 6 Standard
- Windows Mobile 6 Professioncal
* Trình soạn thảo:

SVTH: Bùi Thị Thu Hương -

Lớp 47B

Khoa: Công Nghệ Thông tin

5



GVHD ThS. Nguyễn Cơng Nhật

Khố luận tốt nghiệp

* Kỹ thuật Anchoring & Docking:
- Anchoring: Đây là phương thức neo một điểm trên màn hình. Khi đó,
sự thay đổi của màn hình trên mỗi loại thiết bị thì các chức năng sẽ thay đổi
theo. Có 4 điểm neo chính là Trái, Phải, Trên, Dưới.

- Docking: Cũng tương tự như Anchoring, tuy nhiên, đối tượng được sẽ
được cố định ở một góc nào đó và trải đầy (“fill”) vào khung chứa.

SVTH: Bùi Thị Thu Hương -

Lớp 47B

Khoa: Công Nghệ Thông tin

6


GVHD ThS. Nguyễn Cơng Nhật

Khố luận tốt nghiệp

Một số tính năng mới trong Visual Studio 2008:

Unit Testing for Device


Device Configuration Manager
Device Certificate Manager
Device Emulator Version 3.0
Windows Mobile 5.0 SDK
.NET Compact Framework 2.0 sp2 and 3.5
Update Compilers, MFC Libraries, Tools
Manager CoreCon Framework

1.2.3. Thiết bị để kiểm tra ứng dụng:
1.2.3.1 Lợi ích của việc sử dụng Emulator:
Khơng tốn chi phí cho việc sắm thiết bị để kiểm tra ứng dụng. Điều này
đặc biệt quan trọng vì các thiết bị di động thường có cấu hình, khn dạng
(form) và các nhà sản xuất khác nhau.

SVTH: Bùi Thị Thu Hương -

Lớp 47B

Khoa: Công Nghệ Thông tin

7


GVHD ThS. Nguyễn Cơng Nhật

Khố luận tốt nghiệp

Tất cả mọi lập trình viên đều có thể cài đặt lại thiết bị, có điều kiện để
thử nghiệm nhiều hệ điều hành khác nhau cho việc kiểm tra chương trình.

Phục vụ việc triển khai ứng dụng nhanh hơn nhờ tính năng lưu giữ
trạng thái.
1.2.3.2. Visual Studio Device Emulator
Khi phát triển một ứng dụng, thì vấn đề là chúng ta phải kiểm tra được
ứng dụng đó. Windows Mobile SDK cung cấp 1 bộ cơng cụ Emulator để giả
lập thiết bị thật, nó hỗ trợ đầy đủ tính năng của 1 thiết bị thật.
Là cơng cụ giả lập giúp bạn chạy thử chương trình trong trường hợp
bạn khơng có chiếc PPC hay SmartPhone thật nào, hoặc bạn muốn kiểm tra
chương trình trên nhiều loại máy khác nhau như WM 2003,WM2005…
Emulator đi kèm với Windows Mobile 5.0 SDK nên chỉ cần cài đặt SDK là
đủ.
Tính năng hệ điều hành đầy đủ như thiết bị thật, cả Windows CE và
Windows Mobile.
Tính năng đầy đủ của thiết bị, hỗ trợ chipset ARM. Hỗ trợ phần cứng giả
lập như cổng COM, Network Card.
* Trình quản lý thiết bị ảo
- Điều khiển thiết bị ảo:
+ Start
+ Shutdown
+ Reset

SVTH: Bùi Thị Thu Hương -

Lớp 47B

Khoa: Công Nghệ Thông tin

8



GVHD ThS. Nguyễn Cơng Nhật

Khố luận tốt nghiệp

+ Mail
+ Contacts
+ To-Do list
+ Tasks
- Connects to the network using NAT
+ Uncradle
1.2.4. ActiveSync:
Là công cụ cho phép kết nối giữa thiết bị Windows Mobile và máy
tính.
Tại sao phải sử dụng ActiveSync? - Do việc Debug ứng dụng trên
.NET Compact Framework đều là Debug từ xa.
Để kết nối Emulator với ActiveSync:
+ Sử dụng Device Emulator Manager với tùy chọn Cradle.
+ Cài đặt kết nối trong ActiveSync phải cho phép kết nối DMA.

SVTH: Bùi Thị Thu Hương -

Lớp 47B

Khoa: Công Nghệ Thông tin

9


GVHD ThS. Nguyễn Cơng Nhật


Khố luận tốt nghiệp

Download Microsoft ActiveSync 4.5 tại đây
/>1.3. .Net Compact Framework.
.NET Compact Framework là nền tảng cho 1 số ứng dụng cho PPC
được phát triển trên nền Visual Studio .NET.
Hình 1 và Hình 2 so sánh giữa .Net Framework và .NET Compact
Framework

Hình 1: .Net Framework

SVTH: Bùi Thị Thu Hương -

Lớp 47B

Khoa: Công Nghệ Thông tin

10


GVHD ThS. Nguyễn Cơng Nhật

Khố luận tốt nghiệp

Hình 2: .NET Compact Framework

Ứng dụng chúng ta viết sử dụng .Net Compact Framework được gọi là
Managed Code, nghĩa là code của ứng dụng được quản lý bởi bộ thư viện
dùng chung CLR (Common Language Runtime). Việc quản lý tài nguyên bộ
nhớ, quản lý luồng và quản lý thực thi code đều được CLR xử lý.

1.3.1. Một số hàm API:
* Telephony:
Namespace: WindowsMobile.Telephony
Thực thi một cuộc gọi chỉ bằng 1 dòng lệnh.

Tùy chọn người dùng có quyền hoặc khơng có quyền thực hiện cuộc gọi.
* Pocket Outlook:
Namespace: Microsoft.WindowsMobile.PocketOutlook

SVTH: Bùi Thị Thu Hương -

Lớp 47B

Khoa: Công Nghệ Thông tin

11


GVHD ThS. Nguyễn Cơng Nhật

Khố luận tốt nghiệp

1.3.2. Cơng cụ lập trình
* Microsoft Visual Studio .Net 2005:
Là cơng cụ lập trình chính cho máy tính để bàn cũng như PPC chạy hệ
điều hành Windows. Bạn cũng có thể cài Microsoft Visual Studio .Net 2003
tuy nên cài phiên bản mới nhất này vì nó hỗ trợ nhiều tính năng hơn so với
phiên bản cũ. Bạn có thể mua đĩa cài ở các của hàng bán đĩa chương trình.
* Windows Mobile 6 Professional SDK :
Chứa nhiều công cụ bổ sung để lập trình cho thiết bị di động như

Emulator (Giả lập), CABWIZ (Đóng gói) , Sample Source code, và tài liệu
lập trình khác.
Bạn có thể download miễn phí tại các địa chỉ sau:

SVTH: Bùi Thị Thu Hương -

Lớp 47B

Khoa: Công Nghệ Thông tin

12


GVHD ThS. Nguyễn Cơng Nhật

+

Windows

Mobile

Khố luận tốt nghiệp

6

Professional

SDK

tại


địa

chỉ

/>+ Active Sync 4.5 đây là chương trình cài trên PC giúp bạn đồng bộ (kết
nối) PPC hoặc Smartphone với máy tính để bàn. Download miễn phí tại đây:
/>* Tài liệu:
+ thư viện bổ sung lập trình .NET CF
+ Nhiều ví dụ bổ ích
+ Những kỹ thuật nâng cao
+ Lập trình viên hệ thống
PPC cần phải xem trang này.
+ Cộng đồng .NET Việt Nam
1.4. Ngơn ngữ lập trình C#
1.4.1. Giới thiệu về C#
C# là một ngôn ngữ rất đơn giản, với khoảng 80 từ khóa và hơn 10 kiểu
dữ liệu dựng sẵn, nhưng C# có tính diễn đạt cao. C# hỗ trợ lập trình có cấu
trúc, hướng đối tượng, hướng thành phần (component oriented).
Trọng tâm của ngôn ngữ hướng đối tượng là lớp. Lớp định nghĩa kiểu
dữ liệu mới, cho phép mở rộng ngôn ngữ theo hướng cần giải quyết. C# có
những từ khóa dành cho việc khai báo lớp, phương thức, thuộc tính (property)
mới. C# hỗ trợ đầy đủ khái niệm trụ cột trong lập trình hướng đối tượng: đóng
gói, thừa kế, đa hình.
Định nghĩa lớp trong C# khơng địi hỏi tách rời tập tin tiêu đề với tập
tin cài đặt như C++. Hơn thế, C# hỗ trợ kiểu sưu liệu mới, cho phép sưu liệu
trực tiếp trong tập tin mã nguồn. Đến khi biên dịch sẽ tạo tập tin sưu liệu theo
định dạng XML.
C# hỗ trợ khái niệm giao diện, interfaces (tương tự Java). Một lớp chỉ có
thể kế thừa duy nhất một lớp cha nhưng có thể cài đặt nhiều giao diện.


SVTH: Bùi Thị Thu Hương -

Lớp 47B

Khoa: Công Nghệ Thông tin

13


GVHD ThS. Nguyễn Cơng Nhật

Khố luận tốt nghiệp

C# có kiểu cấu trúc, struct (không giống C++). Cấu trúc là kiểu hạng nhẹ
và bị giới hạn. Cấu trúc không thể thừa kế lớp hay được kế thừa nhưng có thể
cài đặt giao diện.
C# cung cấp những đặc trưng lập trình hướng thành phần như property, sự
kiện và dẫn hướng khai báo (được gọi attribute). Lập trình hướng component
được hỗ trợ bởi CLR thông qua siêu dữ liệu (metadata). Siêu dữ liệu mô tả các
lớp bao gồm các phương thức và thuộc tính, các thơng tin bảo mật…
Assembly là một tập hợp các tập tin mà theo cách nhìn của lập trình viên
là các thư viện liên kết động (dll) hay tập tin thực thi (exe). Trong .NET, một
Assembly là một đơn vị của việc tái sử dụng, xác định phiên bản, bảo mật, và
phân phối. CLR cung cấp một số các lớp để thao tác với Assembly.
C# cũng cho truy cập bộ nhớ dùng con trỏ kiểu C++, nhưng vùng mã đó
được xem như khơng an tồn. CLR sẽ khơng thực thi việc thu dọn rác tự động
các đối tượng được tham chiếu bởi con trỏ cho đến khi lập trình viên tự giải
phóng.
1.4.2. Tại sao phải sử dụng ngơn ngữ C#

Nhiều người tin rằng khơng cần thiết có một ngơn ngữ lập trình mới.
Java, C++, Perl, Microsoft Visual Basic, và những ngôn ngữ khác được nghĩ
rằng đa cung cấp tất cả những chức năng cần thiết.
Ngôn ngữ C# là một ngôn ngữ được dẫn xuất từ C và C++, nhưng nó
được tạo từ nền tảng phát triển hơn. Microsoft bắt đầu với công việc trong C
và C++ và thêm vào những đặc tính mới để làm cho ngơn ngữ này dễ sử dụng
hơn. Nhiều trong số những đặc tính này khá giống với những đặc tính có
trong ngơn ngữ Java. Khơng dừng lại ở đó, Microsoft đưa ra một số mục đích
khi xây dựng ngơn ngữ này. Những mục đích này được được tóm tắt như sau:
C# là ngơn ngữ đơn giản
C# loại bỏ một vài sự phức tạp và rối rắm của những ngôn ngữ như
Java và c++, bao gồm việc loại bỏ những macro, những template, đa kế thừa,
và lớp cơ sở ảo (virtual base class).

SVTH: Bùi Thị Thu Hương -

Lớp 47B

Khoa: Công Nghệ Thông tin

14


GVHD ThS. Nguyễn Cơng Nhật

Khố luận tốt nghiệp

Chúng là những nguyên nhân gây ra sự nhầm lẫn hay dẫn đến những
vấn đề cho các người phát triển C++. Nếu là người học ngơn ngữ này đầu tiên
thì chắc chắn là ta sẽ không trải qua những thời gian để học nó! Nhưng khi đó

sẽ khơng biết được hiệu quả của ngôn ngữ C# khi loại bỏ những vấn đề trên.
Ngôn ngữ C# đơn giản vì nó dựa trên nền tảng C và C++. Nếu chúng ta
thân thiện với C và C++ hoậc thậm chí là Java, chúng ta sẽ thấy C# khá giống
về diện mạo, cú pháp, biểu thức, toán tử và những chức năng khác được lấy
trực tiếp từ ngơn ngữ C và C++, nhưng nó đã được cải tiến để làm cho ngôn
ngữ đơn giản hơn. Một vài trong các sự cải tiến là loại bỏ các dư thừa, hay là
thêm vào những cú pháp thay đổi. Ví dụ như, trong C++ có ba tốn tử làm
việc với các thành viên là ::, . , và ->. Để biết khi nào dùng ba toán tử này
cũng phức tạp và dễ nhầm lẫn. Trong C#, chúng được thay thế với một toán
tử duy nhất gọi là . (dot). Đối với người mới học thì điều này và những việc
cải tiến khác làm bớt nhầm lẫn và đơn giản hơn.
* Ghi chú: Nếu chúng ta đã sử dụng Java và tin rằng nó đơn giản, thì
chúng ta cũng sẽ tìm thấy rằng C# cũng đơn giản. Hầu hết mọi người đều
không tin rằng Java là ngôn ngữ đơn giản. Tuy nhiên, C# thì dễ hơn là Java và
C++.
C# là ngơn ngữ hiện đại
Điều gì làm cho một ngơn ngữ hiện đại? Những đặc tính như là xử lý
ngoại lệ, thu gom bộ nhớ tự động, những kiểu dữ liệu mở rộng, và bảo mật
mã nguồn là những đặc tính được mong đợi trong một ngôn ngữ hiện đại. C#
chứa tất cả những đặc tính trên. Nếu là người mới học lập trình có thể chúng
ta sẽ cảm thấy những đặc tính trên phức tạp và khó hiểu.
* Ghi chú: Con trỏ được tích hợp vào ngơn ngữ C++. Chúng cũng là
nguyên nhân gây ra những rắc rối của ngôn ngữ này. C# loại bỏ những phức
tạp và rắc rối phát sinh bởi con trỏ.
Trong C#, bộ thu gom bộ nhớ tự động và kiểu dữ liệu an tồn được tích
hợp vào ngôn ngữ, sẽ loại bỏ những vấn đề rắc rối của C++.

SVTH: Bùi Thị Thu Hương -

Lớp 47B


Khoa: Công Nghệ Thông tin

15


GVHD ThS. Nguyễn Cơng Nhật

Khố luận tốt nghiệp

C# là ngơn ngữ hƣớng đối tƣợng
Những đặc điểm chính của ngơn ngữ hướng đối tượng (Object-oriented
language) là sự đóng gói (encapsulation), sự kế thừa (inheritance), và đa hình
(polymorphism). C# hỗ trợ tất cả những đặc tính trên. Phần hướng đối tượng
của C# sẽ được trình bày chi tiết trong một chương riêng ở phần sau.
C# là ngôn ngữ mạnh mẽ và cũng mềm dẻo
Như đã đề cập trước, với ngôn ngữ C# chúng ta chỉ bị giới hạn ở chính
bởi bản thân hay là trí tưởng tượng của chúng ta. Ngơn ngữ này khơng đặt
những ràng buộc lên những việc có thể làm. C# được sử dụng cho nhiều các
dự án khác nhau như là tạo ra ứng dụng xử lý văn bản, ứng dụng đồ họa, bản
tính, hay thậm chí những trình biên dịch cho các ngơn ngữ khác.
C# là ngơn ngữ ít từ khóa
C# là ngơn ngữ sử dụng giới hạn những từ khóa. Phần lớn các từ khóa
được sử dụng để mơ tả thơng tin. Chúng ta có thể nghĩ rằng một ngơn ngữ có
nhiều từ khóa thì sẽ mạnh hơn. Điều này khơng phải sự thật, ít nhất là trong
trường hợp ngơn ngữ C#, chúng ta có thể tìm thấy rằng ngơn ngữ này có thể
được sử dụng để làm bất cứ nhiệm vụ nào. Bảng sau liệt kê các từ khóa của
ngơn ngữ C#.

SVTH: Bùi Thị Thu Hương -


Lớp 47B

Khoa: Công Nghệ Thông tin

16


GVHD ThS. Nguyễn Cơng Nhật
abstract

default

As

Khố luận tốt nghiệp
object

sizeof

unsafe

delegate goto

operator

stackalloc

ushort


base

do

if

out

static

using

bool

double

implicit

override

string

virtual

break

else

in


params

struct

volatile

Byte

enum

int

private

switch

void

Case

event

interface

protected this

catch

explicit


internal

public

throw

Char

extern

is

readonly

true

checked

false

lock

ref

try

class

finally


long

return

typeof

const

fixed

namespace sbyte

uint

continue float

new

sealed

ulong

decimal

null

short

unchecked


for

foreach

while

Bảng 1.2: Từ khóa của ngơn ngữ C#.
C# là ngơn ngữ hƣớng module
Mã nguồn C# có thể được viết trong những phần được gọi là những lớp,
những lớp này chứa các phương thức thành viên của nó. Những lớp và những
phương thức có thể được sử dụng lại trong ứng dụng hay các chương trình
khác. Bằng cách truyền các mẫu thông tin đến những lớp hay phương thức
chúng ta có thể tạo ra những mã nguồn dùng lại có hiệu quả.
C# sẽ là một ngôn ngữ phổ biến
C# là một trong những ngơn ngữ lập trình mới nhất. Nhưng ngơn ngữ
này có một số lý do để trở thành một ngơn ngữ phổ biến. Một trong những lý
do chính là Microsoft và sự cam kết của .NET
Microsoft muốn ngôn ngữ C# trở nên phổ biến. Mặc dù một công ty
không thể làm một sản phẩm trở nên phổ biến, nhưng nó có thể hỗ trợ. Cách
đây khơng lâu, Microsoft đã gặp sự thất bại về hệ điều hành Microsoft Bob.
Mặc dù Microsoft muốn Bob trở nên phổ biến nhưng thất bại. C# thay thế tốt

SVTH: Bùi Thị Thu Hương -

Lớp 47B

Khoa: Công Nghệ Thông tin

17



GVHD ThS. Nguyễn Cơng Nhật

Khố luận tốt nghiệp

hơn để đem đến thành công so với Bob. Thật sự là không biết khi nào mọi
người trong công ty Microsoft sử dụng Bob trong công việc hằng ngày của
họ. Tuy nhên, với C# thì khác, nó được sử dụng bởi Microsoft. Nhiều sản
phẩm của công ty này đa chuyển đổi và viết lại bằng C#. Bằng cách sử dụng
ngôn ngữ này Microsoft đa xác nhận khả năng của C# cần thiết cho những
người lập trình.
Micorosoft .NET là một lý do khác để đem đến sự thành công của C#.
.NET là một sự thay đổi trong cách tạo và thực thi những ứng dụng.
Ngồi hai lý do trên ngơn ngữ C# cũng sẽ trở nên phổ biến do những đặc
tính của ngơn ngữ này được đề cập trong mục trước như: đơn giản, hướng đối
tượng, mạnh mẽ...
Ngôn ngữ C# và những ngôn ngữ khác
Chúng ta đa từng nghe đến những ngôn ngữ khác như Visual Basic, C++
và Java. Có lẽ chúng ta cũng tự hỏi sự khác nhau giữa ngôn ngữ C# và nhưng
ngơn ngữ đó. Và cũng tự hỏi tại sao lại chọn ngôn ngữ này để học mà không
chọn một trong những ngơn ngữ kia. Có rất nhiều lý do và chúng ta hãy xem
một số sự so sánh giữa ngôn ngữ C# với những ngôn ngữ khác giúp chúng ta
phần nào trả lời được những thắc mắc.
Microsoft nói rằng C# mang đến sức mạnh của ngôn ngữ C++ với sự dễ
dàng của ngơn ngữ Visual Basic. Có thể nó khơng dễ như Visual Basic,
nhưng với phiên bản Visual Basic .NET (Version 7) thì ngang nhau. Bởi vì
chúng được viết lại từ một nền tảng. Chúng ta có thể viết nhiều chương trình
với ít mã nguồn hơn nếu dùng C#.
Mặc dù C# loại bỏ một vài các đặc tính của C++, nhưng bù lại nó tránh
được những lỗi mà thường gặp trong ngơn ngữ C++. Điều này có thể tiết

kiệm được hàng giờ hay thậm chí hàng ngày trong việc hồn tất một chương
trình.
Một điều quan trọng khác với C++ là mã nguồn C# khơng địi hỏi phải
có tập tin header. Tất cả mã nguồn được viết trong khai báo một lớp.

SVTH: Bùi Thị Thu Hương -

Lớp 47B

Khoa: Công Nghệ Thông tin

18


GVHD ThS. Nguyễn Cơng Nhật

Khố luận tốt nghiệp

.NET runtime trong C# thực hiện việc thu gom bộ nhớ tự động. Do điều
này nên việc sử dụng con trỏ trong C# ít quan trọng hơn trong C++. Những
con trỏ cũng có thể được sử dụng trong C#, khi đó những đoạn mã nguồn này
sẽ được đánh dấu là khơng an tồn (unsafe code).
C# cũng từ bỏ ý tưởng đa kế thừa như trong C++. Và sự khác nhau khác
là C# đưa thêm thuộc tính vào trong một lớp giống như trong Visual Basic.
Và những thành viên của lớp được gọi duy nhất bằng tốn tử “.” khác với
C++ có nhiều cách gọi trong các tình huống khác nhau.
Một ngơn ngữ khác rất mạnh và phổ biến là Java, giống như C++ và C#
được phát triển dựa trên C. Nếu chúng ta quyết định sẽ học Java sau này,
chúng ta sẽ tìm được nhiều cái mà học từ C# có thể được áp dụng.
Điểm giống nhau C# và Java là cả hai cùng biên dịch ra mã trung gian:

C# biên dịch ra MSIL cịn Java biên dịch ra bytecode. Sau đó chúng được
thực hiện bằng cách thông dịch hoặc biên dịch just-in-time trong từng máy ảo
tương ứng. Tuy nhiên, trong ngôn ngữ C# nhiều hỗ trợ được đưa ra để biên
dịch mã ngôn ngữ trung gian sang mã máy. C# chứa nhiều kiểu dữ liệu cơ bản
hơn Java và cũng cho phép nhiều sự mở rộng với kiểu dữ liệu giá trị. Ví dụ,
ngơn ngữ C# hỗ trợ kiểu liệt kệ (enumerator), kiểu này được giới hạn đến một
tập hằng được định nghĩa trước, và kiểu dữ liệu cấu trúc đây là kiểu dữ liệu
giá trị do người dùng định nghĩa.
- Tương tự như Java, C# cũng từ bỏ tính đa kế thừa trong một lớp, tuy
nhiên mơ hình kế thừa đơn này được mở rộng bởi tính đa kế thừa nhiều giao
diện.

SVTH: Bùi Thị Thu Hương -

Lớp 47B

Khoa: Công Nghệ Thông tin

19


GVHD ThS. Nguyễn Cơng Nhật

Khố luận tốt nghiệp

CHƢƠNG II:
TÌM HIỂU VỂ THUẬT TOÁN RSA
2.1.Giới thiệu về mật mã
Số học – ngành khoa học lâu đời nhất của loài người, cho đến khoảng
cuối những năm 70 thế kỷ trước vẫn chỉ được xem là một ngành lý thuyết

thuần túy của toán học, vì hầu như khơng có những ứng dụng thực tế. Tuy
nhiên cùng với sự phát triển của tin học, số học đã đóng một vai trị vơ cùng
quan trọng trong việc xây dựng ngành lý thuyết mật mã.Và hôm nay tơi sẽ
trình bày với các bạn về hệ mã RSA, được xây dựng trên cơ sở lý thuyết số
học.
2.1.1. Mật mã bắt đầu từ đâu ?
Có thể nói mật mã đã có từ thời cổ đại. Như trong quân sự, để chuyển
một bức mật thư mà không sợ bị kẻ thù đọc được dù bức thư có thể bị mất,
người ta đã mã hóa ( encode ) nó thành một bản các ký hiệu mà nếu khơng có
khóa giải mã thì khơng thể nào biết nội dung, và khi gửi đến bên nhận thì mật
thư sẽ được giải mã (decode) theo một cách nào đó nhờ khóa giải mã. Hoặc
trong thời đại ngày nay, trong hoạt động thương mại, đơi khi có những thơng
tin cần phải được giữ bí mật, người ta phải mã hóa nó lại,…chính vì vậy mật
mã luôn quan trọng đối với mọi thời đại.
2.1.2. Một số loại mật mã
Người ta cho rằng ,người đầu tiên áp dụng mật mã chính là nhà quân sự
thiên tài của La Mã cổ đại, Julius Caesar. Mật mã này được dùng trong hoạt
động qn sự. Đó chính là mã Caesar, hệ mã làm nền tảng cho các hệ mã
phức tạp sau này.

SVTH: Bùi Thị Thu Hương -

Lớp 47B

Khoa: Công Nghệ Thông tin

20


GVHD ThS. Nguyễn Cơng Nhật


Khố luận tốt nghiệp

Mã Caesar :
Trước tiên ta lập một bảng tương ứng giữa các chữ cái với các số như sau
ABCDEFGHIJKLM
1 2 3 4 5 6 7 8 9 10 11 12 13
NOPQRSTUVWXYZ
14 15 16 17 18 19 20 21 22 23 24 25 26
Với bảng này để mã hóa một bức mật thư, ta cần một khóa lập mã k là
1 số nguyên bất kỳ, chẳng hạn ta cho k = 3. Sau đó với bức thư ta chuyển nó
thành một bản chỉ gồm các chữ số. Sau đó ta cộng thêm 3 vào mỗi chữ số để
được bản mới gồm các chữ số. Cuối cùng chuyển bản chữ số mới này lại
thành một văn bản chữ nhờ bảng tương ứng trên.
Khi nhận được văn bản, ta giải mã bằng cách biến nó thành bản các chữ
số, sau đó trừ đi 3 với mỗi chữ số, cuối cùng chuyển bản chữ số mới này
thành bản chữ cái, đó chính là văn bản ban đầu .
Lưu ý rằng khi các chữ số vượt quá bảng chữ số khi cộng thêm 3, ta thay
số đó bằng thặng dư bé nhất modulo số phần tử của bảng chữ cái.
Như vậy Mã Caesar được thành lập theo công thức sau :
C ≡ P + 3 (mod 26 ) với P là chữ số trong văn bản nhận được, C là chữ số
trong văn bản mật được gửi đi .
- Ví dụ :
Giả sử ta cần mã hóa một văn bản với nội dung sau :
DAY LA MA CAESAR
Trước hết ta chuyển bản trên thành bản chữ số, thực hiện để đảm bảo tính an
tồn.
Tách văn bản thành từng nhóm 5 chữ cái như sau : DAYLA MACAE SAR
Chuyển lại thành bản chữ số :
4 1 25 12 1 13 1 3 1 5 19 1 18

Chuyển bản chữ số này lại theo khóa k=3 (nếu chữ số nào vượt q 26 thì lấy
phần dư của nó modulo 26 ).Ta được bản chữ số sau :

SVTH: Bùi Thị Thu Hương -

Lớp 47B

Khoa: Công Nghệ Thông tin

21


GVHD ThS. Nguyễn Cơng Nhật

Khố luận tốt nghiệp

7 4 2 15 4 17 4 6 4 8 22 4 21
Cuối cùng chuyển lại thành dạng chữ cái :
GDBODQDFDHVDU
Đây là văn bản mật có thể gửi đi.
Việc giải mã tiến hành tương tự khi biết dược khóa giải mã, cũng chính là
khóa lập mã
k = 3, ta áp dụng cơng thức C ≡ P + 3(mod 26 ) …
Dễ dàng nhận thấy rằng tính bảo mật của loại mã trên là khơng cao. Vì
số khóa có thể dùng để lập mã là không nhiều ( như với bảng chữ cái trên ta
có tối đa 26 khóa ).
Ngồi ra người ta cịn phát triển thêm một số loại mã khác như: mã
khối, mã mũ với tính bảo mật cao hơn, ngồi ra nó cịn làm tiền đề xây dựng
nên một hệ mã hồn tồn mới, đó chính là các hệ mật mã khóa cơng khai như
hệ mã RSA là chủ đề của phần thuyết trình này .

2.1.3- Các hệ mật mã khóa công khai
- Với các loại mật mã được đề cập ở phần trên, các khóa lập mã đều phải
được giữ bí mật, vì nếu có khóa lập mã, người ta có thể tìm ra khóa giải mã
trong thời gian tương đối ngắn .
Như vậy trong một hệ thống có nhiều cá thể cần trao đổi thông tin mật
với nhau, số khóa mật mã chung cần được giữ bí mật là rất lớn, và như thế thì
khơng thể đảm bảo an tồn.
Vì vậy người ta đã tìm cách xây dựng nên các hệ mã sao cho mỗi cá thể
chỉ cần giữ bí mật khóa giải mã của riêng mình, cịn khóa lập mã của mỗi
người lại được thông báo công khai. Và dĩ nhiên không thể ( trong thời gian
đủ dài ) tìm ra khóa giải mã từ khóa lập mã. Khi một cá thể bị lộ khóa giải mã
của mình, thì bí mật của các cá thể cịn lại khơng hề bị ảnh hưởng.
Trước hết ta nói sơ về nguyên tắc của các hệ mã khóa cơng khai.
Giả sử trong hệ thống có n cá thể tham gia trao đổi thơng tin mật. Mỗi cá thể
chọn cho mình khóa lập mã k có cơng thức mã hóa Ek (Encode), cơng thức

SVTH: Bùi Thị Thu Hương -

Lớp 47B

Khoa: Công Nghệ Thông tin

22


GVHD ThS. Nguyễn Cơng Nhật

Khố luận tốt nghiệp

này được thơng báo cơng khai, và một khóa giải mã của riêng mình ( cần

được giữ bí mật ) có cơng thức Dk (Decode) .
Khi cá thể J cần gửi thư cho cá thể I, anh ta cần mã hóa bức thư đó theo
cơng thức mã hóa Eki của cá thể I (đã được thơng báo cơng khai ), sau đó gửi
đi. Khi cá thể I nhận được ,anh ta dùng khóa giải mã Dki của mình để giải mã
bức thư. Như vậy khi bức thư này lọt ra ngồi thì người khác vẫn khơng thể
biết được nội dung vì khóa giải mã Dki chỉ có cá thể I biết mà thơi.
Với ngun tắc trên, năm 1978, một hệ mã khóa cơng khai đầu tiên đã được
đưa ra bởi Ronald Rivest, Adi Shamir và Leonard Adleman ( Sau này thường
được gọi là hệ mã RSA. Chính là viết tắt của tên ba người Rivest-ShamirAdleman).
RSA là một thí dụ điển hình về một đề tài tốn học trừu tượng lại có thể
áp dụng thực tiễn vào đời sống thường nhật. Khi nghiên cứu về các số ngun
tố, ít có ai nghĩ rằng khái niệm số nguyên tố lại có thể hữu dụng vào lĩnh vực
truyền thơng.
2.2.Một số khái biện tốn học cơ bản
Trước hết, tơi xin nhắc lại những khái niệm tốn học cơ bản cần thiết cho
việc hiểu RSA. Trong loạt bài này,
- Phép toán nhân được biểu thị bằng dấu hoa thị : *
Ví dụ: 3*2 có nghĩa là “3 nhân với 2” bằng 6.
- Lũy thừa hay “nâng lên mũ” được, biểu thị bằng dấu: ^
Ví dụ : 3^2 có nghĩa là “3 luỹ thừa 2” .
2.2.1- Số nguyên tố (prime)
Số nguyên tố là những số nguyên chỉ chia chẵn được cho 1 và cho
chính nó mà thơi.
Ví dụ : 2, 3, 5, 7, 11, 13, 17, 23...
2.2.2. Khái niệm nguyên tố cùng nhau (relatively prime or coprime)
Với hai số nguyên dương a và b. Ta ký hiệu:
GCD (a,b) : Ước chung lớn nhất của a và b ( Greatest Common Divisor)

SVTH: Bùi Thị Thu Hương -


Lớp 47B

Khoa: Công Nghệ Thông tin

23


GVHD ThS. Nguyễn Cơng Nhật

Khố luận tốt nghiệp

Để đơn giản ta ký hiệu:
GCD(a,b) =(a,b)
Ví dụ :

(4,6) = 2
(5,6) = 1

Hai số a và b gọi là nguyên tố cùng nhau khi (a,b)=1.
Ví dụ :
9 và 10 là nguyên tố cùng nhau vì (9,10)=1.
2.2.3. Khái niệm modulo
Với m là một số nguyên dương.Ta nói hai số nguyên a và b là đồng dư
với nhau modulo m nếu m chia hết hiệu a-b ( Viết là m|(a-b) )
Ký hiệu a ≡ b ( mod m)
Như vậy a ≡ b (mod m ) khi và chỉ khi tồn tại số nguyên k sao cho :
a = b + k*m
Ví dụ :
13 ≡ 3 ( mod 10 ) vì 13= 3 + 1*10
2.2.4. Phi – Hàm EULER

Định nghĩa : Phi – Hàm Euler Φ(n) có giá trị tại n bằng số các số
khơng vượt quá n và nguyên tố cùng nhau với n.
Ví dụ :
Φ(5) = 4 , Φ(6) = 2 ,Φ(10) = 4
2.2.5. Một số định lý cơ bản
Định lý Euler: Nếu m là số nguyên dương và P nguyên tố cùng nhau
với m thì P^Φ(m) ≡ 1 (mod m ).
- Vậy nếu m và p nguyên tố cùng nhau. Ta đặt s = Φ(m) thì
P^s ≡ 1 (mod m)
Suy ra với a= 1 + k*s
Ta có :
P^a ≡ P*(P^s)^k ≡ P*1^k(mod m) ≡ P (mod m)

SVTH: Bùi Thị Thu Hương -

Lớp 47B

Khoa: Công Nghệ Thông tin

24


×